⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msg.h

📁 linux 内核源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
 */static inline u32 msg_seq_gap(struct tipc_msg *m){	return msg_bits(m, 1, 16, 0xff);}static inline void msg_set_seq_gap(struct tipc_msg *m, u32 n){	msg_set_bits(m, 1, 16, 0xff, n);}static inline u32 msg_req_links(struct tipc_msg *m){	return msg_bits(m, 1, 16, 0xfff);}static inline void msg_set_req_links(struct tipc_msg *m, u32 n){	msg_set_bits(m, 1, 16, 0xfff, n);}/* * Word 2 */static inline u32 msg_dest_domain(struct tipc_msg *m){	return msg_word(m, 2);}static inline void msg_set_dest_domain(struct tipc_msg *m, u32 n){	msg_set_word(m, 2, n);}static inline u32 msg_bcgap_after(struct tipc_msg *m){	return msg_bits(m, 2, 16, 0xffff);}static inline void msg_set_bcgap_after(struct tipc_msg *m, u32 n){	msg_set_bits(m, 2, 16, 0xffff, n);}static inline u32 msg_bcgap_to(struct tipc_msg *m){	return msg_bits(m, 2, 0, 0xffff);}static inline void msg_set_bcgap_to(struct tipc_msg *m, u32 n){	msg_set_bits(m, 2, 0, 0xffff, n);}/* * Word 4 */static inline u32 msg_last_bcast(struct tipc_msg *m){	return msg_bits(m, 4, 16, 0xffff);}static inline void msg_set_last_bcast(struct tipc_msg *m, u32 n){	msg_set_bits(m, 4, 16, 0xffff, n);}static inline u32 msg_fragm_no(struct tipc_msg *m){	return msg_bits(m, 4, 16, 0xffff);}static inline void msg_set_fragm_no(struct tipc_msg *m, u32 n){	msg_set_bits(m, 4, 16, 0xffff, n);}static inline u32 msg_next_sent(struct tipc_msg *m){	return msg_bits(m, 4, 0, 0xffff);}static inline void msg_set_next_sent(struct tipc_msg *m, u32 n){	msg_set_bits(m, 4, 0, 0xffff, n);}static inline u32 msg_long_msgno(struct tipc_msg *m){	return msg_bits(m, 4, 0, 0xffff);}static inline void msg_set_long_msgno(struct tipc_msg *m, u32 n){	msg_set_bits(m, 4, 0, 0xffff, n);}static inline u32 msg_bc_netid(struct tipc_msg *m){	return msg_word(m, 4);}static inline void msg_set_bc_netid(struct tipc_msg *m, u32 id){	msg_set_word(m, 4, id);}static inline u32 msg_link_selector(struct tipc_msg *m){	return msg_bits(m, 4, 0, 1);}static inline void msg_set_link_selector(struct tipc_msg *m, u32 n){	msg_set_bits(m, 4, 0, 1, (n & 1));}/* * Word 5 */static inline u32 msg_session(struct tipc_msg *m){	return msg_bits(m, 5, 16, 0xffff);}static inline void msg_set_session(struct tipc_msg *m, u32 n){	msg_set_bits(m, 5, 16, 0xffff, n);}static inline u32 msg_probe(struct tipc_msg *m){	return msg_bits(m, 5, 0, 1);}static inline void msg_set_probe(struct tipc_msg *m, u32 val){	msg_set_bits(m, 5, 0, 1, (val & 1));}static inline char msg_net_plane(struct tipc_msg *m){	return msg_bits(m, 5, 1, 7) + 'A';}static inline void msg_set_net_plane(struct tipc_msg *m, char n){	msg_set_bits(m, 5, 1, 7, (n - 'A'));}static inline u32 msg_linkprio(struct tipc_msg *m){	return msg_bits(m, 5, 4, 0x1f);}static inline void msg_set_linkprio(struct tipc_msg *m, u32 n){	msg_set_bits(m, 5, 4, 0x1f, n);}static inline u32 msg_bearer_id(struct tipc_msg *m){	return msg_bits(m, 5, 9, 0x7);}static inline void msg_set_bearer_id(struct tipc_msg *m, u32 n){	msg_set_bits(m, 5, 9, 0x7, n);}static inline u32 msg_redundant_link(struct tipc_msg *m){	return msg_bits(m, 5, 12, 0x1);}static inline void msg_set_redundant_link(struct tipc_msg *m){	msg_set_bits(m, 5, 12, 0x1, 1);}static inline void msg_clear_redundant_link(struct tipc_msg *m){	msg_set_bits(m, 5, 12, 0x1, 0);}/* * Word 9 */static inline u32 msg_msgcnt(struct tipc_msg *m){	return msg_bits(m, 9, 16, 0xffff);}static inline void msg_set_msgcnt(struct tipc_msg *m, u32 n){	msg_set_bits(m, 9, 16, 0xffff, n);}static inline u32 msg_bcast_tag(struct tipc_msg *m){	return msg_bits(m, 9, 16, 0xffff);}static inline void msg_set_bcast_tag(struct tipc_msg *m, u32 n){	msg_set_bits(m, 9, 16, 0xffff, n);}static inline u32 msg_max_pkt(struct tipc_msg *m){	return (msg_bits(m, 9, 16, 0xffff) * 4);}static inline void msg_set_max_pkt(struct tipc_msg *m, u32 n){	msg_set_bits(m, 9, 16, 0xffff, (n / 4));}static inline u32 msg_link_tolerance(struct tipc_msg *m){	return msg_bits(m, 9, 0, 0xffff);}static inline void msg_set_link_tolerance(struct tipc_msg *m, u32 n){	msg_set_bits(m, 9, 0, 0xffff, n);}/* * Routing table message data */static inline u32 msg_remote_node(struct tipc_msg *m){	return msg_word(m, msg_hdr_sz(m)/4);}static inline void msg_set_remote_node(struct tipc_msg *m, u32 a){	msg_set_word(m, msg_hdr_sz(m)/4, a);}static inline int msg_dataoctet(struct tipc_msg *m, u32 pos){	return(msg_data(m)[pos + 4] != 0);}static inline void msg_set_dataoctet(struct tipc_msg *m, u32 pos){	msg_data(m)[pos + 4] = 1;}/* * Segmentation message types */#define FIRST_FRAGMENT     0#define FRAGMENT           1#define LAST_FRAGMENT      2/* * Link management protocol message types */#define STATE_MSG       0#define RESET_MSG       1#define ACTIVATE_MSG    2/* * Changeover tunnel message types */#define DUPLICATE_MSG    0#define ORIGINAL_MSG     1/* * Routing table message types */#define EXT_ROUTING_TABLE    0#define LOCAL_ROUTING_TABLE  1#define SLAVE_ROUTING_TABLE  2#define ROUTE_ADDITION       3#define ROUTE_REMOVAL        4/* * Config protocol message types */#define DSC_REQ_MSG          0#define DSC_RESP_MSG         1static inline u32 msg_tot_importance(struct tipc_msg *m){	if (likely(msg_isdata(m))) {		if (likely(msg_orignode(m) == tipc_own_addr))			return msg_importance(m);		return msg_importance(m) + 4;	}	if ((msg_user(m) == MSG_FRAGMENTER)  &&	    (msg_type(m) == FIRST_FRAGMENT))		return msg_importance(msg_get_wrapped(m));	return msg_importance(m);}static inline void msg_init(struct tipc_msg *m, u32 user, u32 type,			    u32 err, u32 hsize, u32 destnode){	memset(m, 0, hsize);	msg_set_version(m);	msg_set_user(m, user);	msg_set_hdr_sz(m, hsize);	msg_set_size(m, hsize);	msg_set_prevnode(m, tipc_own_addr);	msg_set_type(m, type);	msg_set_errcode(m, err);	if (!msg_short(m)) {		msg_set_orignode(m, tipc_own_addr);		msg_set_destnode(m, destnode);	}}/** * msg_calc_data_size - determine total data size for message */static inline int msg_calc_data_size(struct iovec const *msg_sect, u32 num_sect){	int dsz = 0;	int i;	for (i = 0; i < num_sect; i++)		dsz += msg_sect[i].iov_len;	return dsz;}/** * msg_build - create message using specified header and data * * Note: Caller must not hold any locks in case copy_from_user() is interrupted! * * Returns message data size or errno */static inline int msg_build(struct tipc_msg *hdr,			    struct iovec const *msg_sect, u32 num_sect,			    int max_size, int usrmem, struct sk_buff** buf){	int dsz, sz, hsz, pos, res, cnt;	dsz = msg_calc_data_size(msg_sect, num_sect);	if (unlikely(dsz > TIPC_MAX_USER_MSG_SIZE)) {		*buf = NULL;		return -EINVAL;	}	pos = hsz = msg_hdr_sz(hdr);	sz = hsz + dsz;	msg_set_size(hdr, sz);	if (unlikely(sz > max_size)) {		*buf = NULL;		return dsz;	}	*buf = buf_acquire(sz);	if (!(*buf))		return -ENOMEM;	skb_copy_to_linear_data(*buf, hdr, hsz);	for (res = 1, cnt = 0; res && (cnt < num_sect); cnt++) {		if (likely(usrmem))			res = !copy_from_user((*buf)->data + pos,					      msg_sect[cnt].iov_base,					      msg_sect[cnt].iov_len);		else			skb_copy_to_linear_data_offset(*buf, pos,						       msg_sect[cnt].iov_base,						       msg_sect[cnt].iov_len);		pos += msg_sect[cnt].iov_len;	}	if (likely(res))		return dsz;	buf_discard(*buf);	*buf = NULL;	return -EFAULT;}static inline void msg_set_media_addr(struct tipc_msg *m, struct tipc_media_addr *a){	memcpy(&((int *)m)[5], a, sizeof(*a));}static inline void msg_get_media_addr(struct tipc_msg *m, struct tipc_media_addr *a){	memcpy(a, &((int*)m)[5], sizeof(*a));}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -