Blame port_private.h

Packit 9c3e7e
/**
Packit 9c3e7e
 * @file port_private.h
Packit 9c3e7e
 * @note Copyright (C) 2018 Richard Cochran <richardcochran@gmail.com>
Packit 9c3e7e
 *
Packit 9c3e7e
 * This program is free software; you can redistribute it and/or modify
Packit 9c3e7e
 * it under the terms of the GNU General Public License as published by
Packit 9c3e7e
 * the Free Software Foundation; either version 2 of the License, or
Packit 9c3e7e
 * (at your option) any later version.
Packit 9c3e7e
 *
Packit 9c3e7e
 * This program is distributed in the hope that it will be useful,
Packit 9c3e7e
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 9c3e7e
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 9c3e7e
 * GNU General Public License for more details.
Packit 9c3e7e
 *
Packit 9c3e7e
 * You should have received a copy of the GNU General Public License along
Packit 9c3e7e
 * with this program; if not, write to the Free Software Foundation, Inc.,
Packit 9c3e7e
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Packit 9c3e7e
 */
Packit 9c3e7e
#ifndef HAVE_PORT_PRIVATE_H
Packit 9c3e7e
#define HAVE_PORT_PRIVATE_H
Packit 9c3e7e
Packit 9c3e7e
#include <sys/queue.h>
Packit 9c3e7e
Packit 9c3e7e
#include "clock.h"
Packit 9c3e7e
#include "fsm.h"
Packit 9c3e7e
#include "msg.h"
Packit 9c3e7e
#include "tmv.h"
Packit 9c3e7e
Packit 9c3e7e
#define NSEC2SEC 1000000000LL
Packit 9c3e7e
Packit 9c3e7e
enum syfu_state {
Packit 9c3e7e
	SF_EMPTY,
Packit 9c3e7e
	SF_HAVE_SYNC,
Packit 9c3e7e
	SF_HAVE_FUP,
Packit 9c3e7e
};
Packit 9c3e7e
Packit 9c3e7e
enum link_state {
Packit 9c3e7e
	LINK_DOWN  = (1<<0),
Packit 9c3e7e
	LINK_UP  = (1<<1),
Packit 9c3e7e
	LINK_STATE_CHANGED = (1<<3),
Packit 9c3e7e
	TS_LABEL_CHANGED  = (1<<4),
Packit 9c3e7e
};
Packit 9c3e7e
Packit 9c3e7e
struct nrate_estimator {
Packit 9c3e7e
	double ratio;
Packit 9c3e7e
	tmv_t origin1;
Packit 9c3e7e
	tmv_t ingress1;
Packit 9c3e7e
	unsigned int max_count;
Packit 9c3e7e
	unsigned int count;
Packit 9c3e7e
	int ratio_valid;
Packit 9c3e7e
};
Packit 9c3e7e
Packit 9c3e7e
struct tc_txd {
Packit 9c3e7e
	TAILQ_ENTRY(tc_txd) list;
Packit 9c3e7e
	struct ptp_message *msg;
Packit 9c3e7e
	tmv_t residence;
Packit 9c3e7e
	int ingress_port;
Packit 9c3e7e
};
Packit 9c3e7e
Packit 9c3e7e
struct port {
Packit 9c3e7e
	LIST_ENTRY(port) list;
Packit 9c3e7e
	char *name;
Packit 9c3e7e
	struct interface *iface;
Packit 9c3e7e
	struct clock *clock;
Packit 9c3e7e
	struct transport *trp;
Packit 9c3e7e
	enum timestamp_type timestamping;
Packit 9c3e7e
	struct fdarray fda;
Packit 9c3e7e
	int fault_fd;
Packit 9c3e7e
	int phc_index;
Packit 9c3e7e
Packit 9c3e7e
	void (*dispatch)(struct port *p, enum fsm_event event, int mdiff);
Packit 9c3e7e
	enum fsm_event (*event)(struct port *p, int fd_index);
Packit 9c3e7e
Packit 9c3e7e
	int jbod;
Packit 9c3e7e
	struct foreign_clock *best;
Packit 9c3e7e
	enum syfu_state syfu;
Packit 9c3e7e
	struct ptp_message *last_syncfup;
Packit 9c3e7e
	TAILQ_HEAD(delay_req, ptp_message) delay_req;
Packit 9c3e7e
	struct ptp_message *peer_delay_req;
Packit 9c3e7e
	struct ptp_message *peer_delay_resp;
Packit 9c3e7e
	struct ptp_message *peer_delay_fup;
Packit 9c3e7e
	int peer_portid_valid;
Packit 9c3e7e
	struct PortIdentity peer_portid;
Packit 9c3e7e
	struct {
Packit 9c3e7e
		UInteger16 announce;
Packit 9c3e7e
		UInteger16 delayreq;
Packit 9c3e7e
		UInteger16 signaling;
Packit 9c3e7e
		UInteger16 sync;
Packit 9c3e7e
	} seqnum;
Packit 9c3e7e
	tmv_t peer_delay;
Packit 9c3e7e
	struct tsproc *tsproc;
Packit 9c3e7e
	int log_sync_interval;
Packit 9c3e7e
	struct nrate_estimator nrate;
Packit 9c3e7e
	unsigned int pdr_missing;
Packit 9c3e7e
	unsigned int multiple_seq_pdr_count;
Packit 9c3e7e
	unsigned int multiple_pdr_detected;
Packit 9c3e7e
	enum port_state (*state_machine)(enum port_state state,
Packit 9c3e7e
					 enum fsm_event event, int mdiff);
Packit 9c3e7e
	/* portDS */
Packit 9c3e7e
	struct PortIdentity portIdentity;
Packit 9c3e7e
	enum port_state     state; /*portState*/
Packit 9c3e7e
	Integer64           asymmetry;
Packit 9c3e7e
	int                 asCapable;
Packit 9c3e7e
	Integer8            logMinDelayReqInterval;
Packit 9c3e7e
	TimeInterval        peerMeanPathDelay;
Packit 9c3e7e
	Integer8            logAnnounceInterval;
Packit 9c3e7e
	UInteger8           announceReceiptTimeout;
Packit 9c3e7e
	int                 announce_span;
Packit 9c3e7e
	UInteger8           syncReceiptTimeout;
Packit 9c3e7e
	UInteger8           transportSpecific;
Packit 9c3e7e
	UInteger8           localPriority;
Packit 9c3e7e
	Integer8            logSyncInterval;
Packit 9c3e7e
	Enumeration8        delayMechanism;
Packit 9c3e7e
	Integer8            logMinPdelayReqInterval;
Packit 9c3e7e
	UInteger32          neighborPropDelayThresh;
Packit 9c3e7e
	int                 follow_up_info;
Packit 9c3e7e
	int                 freq_est_interval;
Packit 9c3e7e
	int                 hybrid_e2e;
Packit 9c3e7e
	int                 master_only;
Packit 9c3e7e
	int                 match_transport_specific;
Packit 9c3e7e
	int                 min_neighbor_prop_delay;
Packit 9c3e7e
	int                 net_sync_monitor;
Packit 9c3e7e
	int                 path_trace_enabled;
Packit 9c3e7e
	int                 tc_spanning_tree;
Packit 9c3e7e
	Integer64           rx_timestamp_offset;
Packit 9c3e7e
	Integer64           tx_timestamp_offset;
Packit 9c3e7e
	int                 unicast_req_duration;
Packit 9c3e7e
	enum link_state     link_status;
Packit 9c3e7e
	struct fault_interval flt_interval_pertype[FT_CNT];
Packit 9c3e7e
	enum fault_type     last_fault_type;
Packit 9c3e7e
	unsigned int        versionNumber; /*UInteger4*/
Packit 9c3e7e
	/* foreignMasterDS */
Packit 9c3e7e
	LIST_HEAD(fm, foreign_clock) foreign_masters;
Packit 9c3e7e
	/* TC book keeping */
Packit 9c3e7e
	TAILQ_HEAD(tct, tc_txd) tc_transmitted;
Packit 9c3e7e
	/* unicast client mode */
Packit 9c3e7e
	struct unicast_master_table *unicast_master_table;
Packit 9c3e7e
	/* unicast service mode */
Packit 9c3e7e
	struct unicast_service *unicast_service;
Packit 9c3e7e
	int inhibit_multicast_service;
Packit 9c3e7e
};
Packit 9c3e7e
Packit 9c3e7e
#define portnum(p) (p->portIdentity.portNumber)
Packit 9c3e7e
Packit 9c3e7e
void e2e_dispatch(struct port *p, enum fsm_event event, int mdiff);
Packit 9c3e7e
enum fsm_event e2e_event(struct port *p, int fd_index);
Packit 9c3e7e
Packit 9c3e7e
void p2p_dispatch(struct port *p, enum fsm_event event, int mdiff);
Packit 9c3e7e
enum fsm_event p2p_event(struct port *p, int fd_index);
Packit 9c3e7e
Packit 9c3e7e
int clear_fault_asap(struct fault_interval *faint);
Packit 9c3e7e
void delay_req_prune(struct port *p);
Packit 9c3e7e
void fc_clear(struct foreign_clock *fc);
Packit 9c3e7e
void flush_delay_req(struct port *p);
Packit 9c3e7e
void flush_last_sync(struct port *p);
Packit 9c3e7e
int port_clr_tmo(int fd);
Packit 9c3e7e
int port_delay_request(struct port *p);
Packit 9c3e7e
void port_disable(struct port *p);
Packit 9c3e7e
int port_initialize(struct port *p);
Packit 9c3e7e
int port_is_enabled(struct port *p);
Packit 9c3e7e
void port_link_status(void *ctx, int index, int linkup);
Packit 9c3e7e
int port_set_announce_tmo(struct port *p);
Packit 9c3e7e
int port_set_delay_tmo(struct port *p);
Packit 9c3e7e
int port_set_qualification_tmo(struct port *p);
Packit 9c3e7e
void port_show_transition(struct port *p, enum port_state next,
Packit 9c3e7e
			  enum fsm_event event);
Packit 9c3e7e
struct ptp_message *port_signaling_construct(struct port *p,
Packit 9c3e7e
					     struct address *address,
Packit 9c3e7e
					     struct PortIdentity *tpid);
Packit 9c3e7e
int port_tx_announce(struct port *p, struct address *dst);
Packit 9c3e7e
int port_tx_sync(struct port *p, struct address *dst);
Packit 9c3e7e
int process_announce(struct port *p, struct ptp_message *m);
Packit 9c3e7e
void process_delay_resp(struct port *p, struct ptp_message *m);
Packit 9c3e7e
void process_follow_up(struct port *p, struct ptp_message *m);
Packit 9c3e7e
int process_pdelay_req(struct port *p, struct ptp_message *m);
Packit 9c3e7e
int process_pdelay_resp(struct port *p, struct ptp_message *m);
Packit 9c3e7e
void process_pdelay_resp_fup(struct port *p, struct ptp_message *m);
Packit 9c3e7e
int process_signaling(struct port *p, struct ptp_message *m);
Packit 9c3e7e
void process_sync(struct port *p, struct ptp_message *m);
Packit 9c3e7e
int source_pid_eq(struct ptp_message *m1, struct ptp_message *m2);
Packit 9c3e7e
void ts_add(tmv_t *ts, Integer64 correction);
Packit 9c3e7e
Packit 9c3e7e
#endif