diff options
Diffstat (limited to 'net/tipc/link.h')
| -rw-r--r-- | net/tipc/link.h | 207 | 
1 files changed, 100 insertions, 107 deletions
diff --git a/net/tipc/link.h b/net/tipc/link.h index c562888d25d..200d518b218 100644 --- a/net/tipc/link.h +++ b/net/tipc/link.h @@ -1,8 +1,8 @@  /*   * net/tipc/link.h: Include file for TIPC link code   * - * Copyright (c) 1995-2006, Ericsson AB - * Copyright (c) 2004-2005, Wind River Systems + * Copyright (c) 1995-2006, 2013, Ericsson AB + * Copyright (c) 2004-2005, 2010-2011, Wind River Systems   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without @@ -37,51 +37,81 @@  #ifndef _TIPC_LINK_H  #define _TIPC_LINK_H -#include "dbg.h"  #include "msg.h"  #include "node.h" -#define PUSH_FAILED   1 -#define PUSH_FINISHED 2 - -/* - * Link states +/* Out-of-range value for link sequence numbers   */ +#define INVALID_LINK_SEQ 0x10000 +/* Link working states + */  #define WORKING_WORKING 560810u  #define WORKING_UNKNOWN 560811u  #define RESET_UNKNOWN   560812u  #define RESET_RESET     560813u -/* - * Starting value for maximum packet size negotiation on unicast links - * (unless bearer MTU is less) +/* Link endpoint execution states   */ +#define LINK_STARTED    0x0001 +#define LINK_STOPPED    0x0002 +/* Starting value for maximum packet size negotiation on unicast links + * (unless bearer MTU is less) + */  #define MAX_PKT_DEFAULT 1500 +struct tipc_stats { +	u32 sent_info;		/* used in counting # sent packets */ +	u32 recv_info;		/* used in counting # recv'd packets */ +	u32 sent_states; +	u32 recv_states; +	u32 sent_probes; +	u32 recv_probes; +	u32 sent_nacks; +	u32 recv_nacks; +	u32 sent_acks; +	u32 sent_bundled; +	u32 sent_bundles; +	u32 recv_bundled; +	u32 recv_bundles; +	u32 retransmitted; +	u32 sent_fragmented; +	u32 sent_fragments; +	u32 recv_fragmented; +	u32 recv_fragments; +	u32 link_congs;		/* # port sends blocked by congestion */ +	u32 deferred_recv; +	u32 duplicates; +	u32 max_queue_sz;	/* send queue size high water mark */ +	u32 accu_queue_sz;	/* used for send queue size profiling */ +	u32 queue_sz_counts;	/* used for send queue size profiling */ +	u32 msg_length_counts;	/* used for message length profiling */ +	u32 msg_lengths_total;	/* used for message length profiling */ +	u32 msg_length_profile[7]; /* used for msg. length profiling */ +}; +  /** - * struct link - TIPC link data structure + * struct tipc_link - TIPC link data structure   * @addr: network address of link's peer node   * @name: link name character string   * @media_addr: media address to use when sending messages over link   * @timer: link timer   * @owner: pointer to peer node - * @link_list: adjacent links in bearer's list of links - * @started: indicates if link has been started + * @flags: execution state flags for link endpoint instance   * @checkpoint: reference point for triggering link continuity checking   * @peer_session: link session # being used by peer end of link   * @peer_bearer_id: bearer id used by link's peer endpoint - * @b_ptr: pointer to bearer used by link + * @bearer_id: local bearer id used by link   * @tolerance: minimum link continuity loss needed to reset link [in ms]   * @continuity_interval: link continuity testing interval [in ms]   * @abort_limit: # of unacknowledged continuity probes needed to reset link   * @state: current state of link FSM - * @blocked: indicates if link has been administratively blocked   * @fsm_msg_cnt: # of protocol messages link FSM has sent in current state   * @proto_msg: template for control messages generated by link   * @pmsg: convenience pointer to "proto_msg" field   * @priority: current link priority + * @net_plane: current link network plane ('A' through 'H')   * @queue_limit: outbound message queue congestion thresholds (indexed by user)   * @exp_msg_count: # of tunnelled messages expected during link changeover   * @reset_checkpoint: seq # of last acknowledged message at time of link reset @@ -105,30 +135,26 @@   * @next_out: ptr to first unsent outbound message in queue   * @waiting_ports: linked list of ports waiting for link congestion to abate   * @long_msg_seq_no: next identifier to use for outbound fragmented messages - * @defragm_buf: list of partially reassembled inbound message fragments + * @reasm_buf: head of partially reassembled inbound message fragments   * @stats: collects statistics regarding link activity - * @print_buf: print buffer used to log link activity   */ - -struct link { +struct tipc_link {  	u32 addr;  	char name[TIPC_MAX_LINK_NAME];  	struct tipc_media_addr media_addr;  	struct timer_list timer;  	struct tipc_node *owner; -	struct list_head link_list;  	/* Management and link supervision data */ -	int started; +	unsigned int flags;  	u32 checkpoint;  	u32 peer_session;  	u32 peer_bearer_id; -	struct bearer *b_ptr; +	u32 bearer_id;  	u32 tolerance;  	u32 continuity_interval;  	u32 abort_limit;  	int state; -	int blocked;  	u32 fsm_msg_cnt;  	struct {  		unchar hdr[INT_H_SIZE]; @@ -136,6 +162,7 @@ struct link {  	} proto_msg;  	struct tipc_msg *pmsg;  	u32 priority; +	char net_plane;  	u32 queue_limit[15];	/* queue_limit[0]==window limit */  	/* Changeover */ @@ -169,90 +196,62 @@ struct link {  	struct sk_buff *next_out;  	struct list_head waiting_ports; -	/* Fragmentation/defragmentation */ +	/* Fragmentation/reassembly */  	u32 long_msg_seq_no; -	struct sk_buff *defragm_buf; +	struct sk_buff *reasm_buf;  	/* Statistics */ -	struct { -		u32 sent_info;		/* used in counting # sent packets */ -		u32 recv_info;		/* used in counting # recv'd packets */ -		u32 sent_states; -		u32 recv_states; -		u32 sent_probes; -		u32 recv_probes; -		u32 sent_nacks; -		u32 recv_nacks; -		u32 sent_acks; -		u32 sent_bundled; -		u32 sent_bundles; -		u32 recv_bundled; -		u32 recv_bundles; -		u32 retransmitted; -		u32 sent_fragmented; -		u32 sent_fragments; -		u32 recv_fragmented; -		u32 recv_fragments; -		u32 link_congs;		/* # port sends blocked by congestion */ -		u32 bearer_congs; -		u32 deferred_recv; -		u32 duplicates; - -		/* for statistical profiling of send queue size */ - -		u32 max_queue_sz; -		u32 accu_queue_sz; -		u32 queue_sz_counts; - -		/* for statistical profiling of message lengths */ - -		u32 msg_length_counts; -		u32 msg_lengths_total; -		u32 msg_length_profile[7]; -	} stats; - -	struct print_buf print_buf; +	struct tipc_stats stats;  }; -struct port; +struct tipc_port; -struct link *tipc_link_create(struct bearer *b_ptr, const u32 peer, +struct tipc_link *tipc_link_create(struct tipc_node *n_ptr, +			      struct tipc_bearer *b_ptr,  			      const struct tipc_media_addr *media_addr); -void tipc_link_delete(struct link *l_ptr); -void tipc_link_changeover(struct link *l_ptr); -void tipc_link_send_duplicate(struct link *l_ptr, struct link *dest); -void tipc_link_reset_fragments(struct link *l_ptr); -int tipc_link_is_up(struct link *l_ptr); -int tipc_link_is_active(struct link *l_ptr); -u32 tipc_link_push_packet(struct link *l_ptr); -void tipc_link_stop(struct link *l_ptr); -struct sk_buff *tipc_link_cmd_config(const void *req_tlv_area, int req_tlv_space, u16 cmd); -struct sk_buff *tipc_link_cmd_show_stats(const void *req_tlv_area, int req_tlv_space); -struct sk_buff *tipc_link_cmd_reset_stats(const void *req_tlv_area, int req_tlv_space); -void tipc_link_reset(struct link *l_ptr); -int tipc_link_send(struct sk_buff *buf, u32 dest, u32 selector); -int tipc_link_send_buf(struct link *l_ptr, struct sk_buff *buf); -u32 tipc_link_get_max_pkt(u32 dest,u32 selector); -int tipc_link_send_sections_fast(struct port* sender, -				 struct iovec const *msg_sect, -				 const u32 num_sect, -				 u32 destnode); -void tipc_link_recv_bundle(struct sk_buff *buf); -int  tipc_link_recv_fragment(struct sk_buff **pending, -			     struct sk_buff **fb, -			     struct tipc_msg **msg); -void tipc_link_send_proto_msg(struct link *l_ptr, u32 msg_typ, int prob, u32 gap, -			      u32 tolerance, u32 priority, u32 acked_mtu); -void tipc_link_push_queue(struct link *l_ptr); +void tipc_link_delete_list(unsigned int bearer_id, bool shutting_down); +void tipc_link_failover_send_queue(struct tipc_link *l_ptr); +void tipc_link_dup_queue_xmit(struct tipc_link *l_ptr, struct tipc_link *dest); +void tipc_link_reset_fragments(struct tipc_link *l_ptr); +int tipc_link_is_up(struct tipc_link *l_ptr); +int tipc_link_is_active(struct tipc_link *l_ptr); +void tipc_link_purge_queues(struct tipc_link *l_ptr); +struct sk_buff *tipc_link_cmd_config(const void *req_tlv_area, +				     int req_tlv_space, +				     u16 cmd); +struct sk_buff *tipc_link_cmd_show_stats(const void *req_tlv_area, +					 int req_tlv_space); +struct sk_buff *tipc_link_cmd_reset_stats(const void *req_tlv_area, +					  int req_tlv_space); +void tipc_link_reset_all(struct tipc_node *node); +void tipc_link_reset(struct tipc_link *l_ptr); +void tipc_link_reset_list(unsigned int bearer_id); +int tipc_link_xmit(struct sk_buff *buf, u32 dest, u32 selector); +void tipc_link_names_xmit(struct list_head *message_list, u32 dest); +int __tipc_link_xmit(struct tipc_link *l_ptr, struct sk_buff *buf); +int tipc_link_send_buf(struct tipc_link *l_ptr, struct sk_buff *buf); +u32 tipc_link_get_max_pkt(u32 dest, u32 selector); +int tipc_link_iovec_xmit_fast(struct tipc_port *sender, +			      struct iovec const *msg_sect, +			      unsigned int len, u32 destnode); +void tipc_link_bundle_rcv(struct sk_buff *buf); +void tipc_link_proto_xmit(struct tipc_link *l_ptr, u32 msg_typ, int prob, +			  u32 gap, u32 tolerance, u32 priority, u32 acked_mtu); +void tipc_link_push_queue(struct tipc_link *l_ptr);  u32 tipc_link_defer_pkt(struct sk_buff **head, struct sk_buff **tail, -		   struct sk_buff *buf); -void tipc_link_wakeup_ports(struct link *l_ptr, int all); -void tipc_link_set_queue_limits(struct link *l_ptr, u32 window); -void tipc_link_retransmit(struct link *l_ptr, struct sk_buff *start, u32 retransmits); +			struct sk_buff *buf); +void tipc_link_wakeup_ports(struct tipc_link *l_ptr, int all); +void tipc_link_set_queue_limits(struct tipc_link *l_ptr, u32 window); +void tipc_link_retransmit(struct tipc_link *l_ptr, +			  struct sk_buff *start, u32 retransmits);  /*   * Link sequence number manipulation routines (uses modulo 2**16 arithmetic)   */ +static inline u32 buf_seqno(struct sk_buff *buf) +{ +	return msg_seqno(buf_msg(buf)); +}  static inline u32 mod(u32 x)  { @@ -287,33 +286,27 @@ static inline u32 lesser(u32 left, u32 right)  /*   * Link status checking routines   */ - -static inline int link_working_working(struct link *l_ptr) +static inline int link_working_working(struct tipc_link *l_ptr)  {  	return l_ptr->state == WORKING_WORKING;  } -static inline int link_working_unknown(struct link *l_ptr) +static inline int link_working_unknown(struct tipc_link *l_ptr)  {  	return l_ptr->state == WORKING_UNKNOWN;  } -static inline int link_reset_unknown(struct link *l_ptr) +static inline int link_reset_unknown(struct tipc_link *l_ptr)  {  	return l_ptr->state == RESET_UNKNOWN;  } -static inline int link_reset_reset(struct link *l_ptr) +static inline int link_reset_reset(struct tipc_link *l_ptr)  {  	return l_ptr->state == RESET_RESET;  } -static inline int link_blocked(struct link *l_ptr) -{ -	return l_ptr->exp_msg_count || l_ptr->blocked; -} - -static inline int link_congested(struct link *l_ptr) +static inline int link_congested(struct tipc_link *l_ptr)  {  	return l_ptr->out_queue_size >= l_ptr->queue_limit[0];  }  | 
