1 /*
2  * netlink-types.h	Netlink Types (Private)
3  *
4  *	This library is free software; you can redistribute it and/or
5  *	modify it under the terms of the GNU Lesser General Public
6  *	License as published by the Free Software Foundation version 2.1
7  *	of the License.
8  *
9  * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
10  */
11 
12 #ifndef NETLINK_LOCAL_TYPES_H_
13 #define NETLINK_LOCAL_TYPES_H_
14 
15 #include <netlink/list.h>
16 #include <netlink/route/link.h>
17 #include <netlink/route/qdisc.h>
18 #include <netlink/route/rtnl.h>
19 #include <netlink/route/route.h>
20 
21 #define NL_SOCK_BUFSIZE_SET	(1<<0)
22 #define NL_SOCK_PASSCRED	(1<<1)
23 #define NL_OWN_PORT		(1<<2)
24 #define NL_MSG_PEEK		(1<<3)
25 #define NL_NO_AUTO_ACK		(1<<4)
26 
27 #define NL_MSG_CRED_PRESENT 1
28 
29 struct nl_cache_ops;
30 struct nl_sock;
31 struct nl_object;
32 
33 struct nl_cb
34 {
35 	nl_recvmsg_msg_cb_t	cb_set[NL_CB_TYPE_MAX+1];
36 	void *			cb_args[NL_CB_TYPE_MAX+1];
37 
38 	nl_recvmsg_err_cb_t	cb_err;
39 	void *			cb_err_arg;
40 
41 	/** May be used to replace nl_recvmsgs with your own implementation
42 	 * in all internal calls to nl_recvmsgs. */
43 	int			(*cb_recvmsgs_ow)(struct nl_sock *,
44 						  struct nl_cb *);
45 
46 	/** Overwrite internal calls to nl_recv, must return the number of
47 	 * octets read and allocate a buffer for the received data. */
48 	int			(*cb_recv_ow)(struct nl_sock *,
49 					      struct sockaddr_nl *,
50 					      unsigned char **,
51 					      struct ucred **);
52 
53 	/** Overwrites internal calls to nl_send, must send the netlink
54 	 * message. */
55 	int			(*cb_send_ow)(struct nl_sock *,
56 					      struct nl_msg *);
57 
58 	int			cb_refcnt;
59 };
60 
61 struct nl_sock
62 {
63 	struct sockaddr_nl	s_local;
64 	struct sockaddr_nl	s_peer;
65 	int			s_fd;
66 	int			s_proto;
67 	unsigned int		s_seq_next;
68 	unsigned int		s_seq_expect;
69 	int			s_flags;
70 	struct nl_cb *		s_cb;
71 };
72 
73 struct nl_cache
74 {
75 	struct nl_list_head	c_items;
76 	int			c_nitems;
77 	int                     c_iarg1;
78 	int                     c_iarg2;
79 	struct nl_cache_ops *   c_ops;
80 };
81 
82 struct nl_cache_assoc
83 {
84 	struct nl_cache *	ca_cache;
85 	change_func_t		ca_change;
86 	void *			ca_change_data;
87 };
88 
89 struct nl_cache_mngr
90 {
91 	int			cm_protocol;
92 	int			cm_flags;
93 	int			cm_nassocs;
94 	struct nl_sock *	cm_handle;
95 	struct nl_cache_assoc *	cm_assocs;
96 };
97 
98 struct nl_parser_param;
99 
100 #define LOOSE_COMPARISON	1
101 
102 #define NL_OBJ_MARK		1
103 
104 struct nl_object
105 {
106 	NLHDR_COMMON
107 };
108 
109 struct nl_data
110 {
111 	size_t			d_size;
112 	void *			d_data;
113 };
114 
115 struct nl_addr
116 {
117 	int			a_family;
118 	unsigned int		a_maxsize;
119 	unsigned int		a_len;
120 	int			a_prefixlen;
121 	int			a_refcnt;
122 	char			a_addr[0];
123 };
124 
125 struct nl_msg
126 {
127 	int			nm_protocol;
128 	int			nm_flags;
129 	struct sockaddr_nl	nm_src;
130 	struct sockaddr_nl	nm_dst;
131 	struct ucred		nm_creds;
132 	struct nlmsghdr *	nm_nlh;
133 	size_t			nm_size;
134 	int			nm_refcnt;
135 };
136 
137 struct rtnl_link_map
138 {
139 	uint64_t lm_mem_start;
140 	uint64_t lm_mem_end;
141 	uint64_t lm_base_addr;
142 	uint16_t lm_irq;
143 	uint8_t  lm_dma;
144 	uint8_t  lm_port;
145 };
146 
147 #define IFQDISCSIZ	32
148 
149 struct rtnl_link
150 {
151 	NLHDR_COMMON
152 
153 	char		l_name[IFNAMSIZ];
154 
155 	uint32_t	l_family;
156 	uint32_t	l_arptype;
157 	uint32_t	l_index;
158 	uint32_t	l_flags;
159 	uint32_t	l_change;
160 	uint32_t 	l_mtu;
161 	uint32_t	l_link;
162 	uint32_t	l_txqlen;
163 	uint32_t	l_weight;
164 	uint32_t	l_master;
165 	struct nl_addr *l_addr;
166 	struct nl_addr *l_bcast;
167 	char		l_qdisc[IFQDISCSIZ];
168 	struct rtnl_link_map l_map;
169 	uint64_t	l_stats[RTNL_LINK_STATS_MAX+1];
170 	uint32_t	l_flag_mask;
171 	uint8_t		l_operstate;
172 	uint8_t		l_linkmode;
173 	/* 2 byte hole */
174 	struct rtnl_link_info_ops *l_info_ops;
175 	void *		l_info;
176 };
177 
178 struct rtnl_ncacheinfo
179 {
180 	uint32_t nci_confirmed;	/**< Time since neighbour validty was last confirmed */
181 	uint32_t nci_used;	/**< Time since neighbour entry was last ued */
182 	uint32_t nci_updated;	/**< Time since last update */
183 	uint32_t nci_refcnt;	/**< Reference counter */
184 };
185 
186 
187 struct rtnl_neigh
188 {
189 	NLHDR_COMMON
190 	uint32_t	n_family;
191 	uint32_t	n_ifindex;
192 	uint16_t	n_state;
193 	uint8_t		n_flags;
194 	uint8_t		n_type;
195 	struct nl_addr *n_lladdr;
196 	struct nl_addr *n_dst;
197 	uint32_t	n_probes;
198 	struct rtnl_ncacheinfo n_cacheinfo;
199 	uint32_t                n_state_mask;
200 	uint32_t                n_flag_mask;
201 };
202 
203 
204 struct rtnl_addr_cacheinfo
205 {
206 	/* Preferred lifetime in seconds */
207 	uint32_t aci_prefered;
208 
209 	/* Valid lifetime in seconds */
210 	uint32_t aci_valid;
211 
212 	/* Timestamp of creation in 1/100s seince boottime */
213 	uint32_t aci_cstamp;
214 
215 	/* Timestamp of last update in 1/100s since boottime */
216 	uint32_t aci_tstamp;
217 };
218 
219 struct rtnl_addr
220 {
221 	NLHDR_COMMON
222 
223 	uint8_t		a_family;
224 	uint8_t		a_prefixlen;
225 	uint8_t		a_flags;
226 	uint8_t		a_scope;
227 	uint32_t	a_ifindex;
228 
229 	struct nl_addr *a_peer;
230 	struct nl_addr *a_local;
231 	struct nl_addr *a_bcast;
232 	struct nl_addr *a_anycast;
233 	struct nl_addr *a_multicast;
234 
235 	struct rtnl_addr_cacheinfo a_cacheinfo;
236 
237 	char a_label[IFNAMSIZ];
238 	uint32_t a_flag_mask;
239 };
240 
241 struct rtnl_nexthop
242 {
243 	uint8_t			rtnh_flags;
244 	uint8_t			rtnh_flag_mask;
245 	uint8_t			rtnh_weight;
246 	/* 1 byte spare */
247 	uint32_t		rtnh_ifindex;
248 	struct nl_addr *	rtnh_gateway;
249 	uint32_t		ce_mask; /* HACK to support attr macros */
250 	struct nl_list_head	rtnh_list;
251 	uint32_t		rtnh_realms;
252 };
253 
254 struct rtnl_route
255 {
256 	NLHDR_COMMON
257 
258 	uint8_t			rt_family;
259 	uint8_t			rt_dst_len;
260 	uint8_t			rt_src_len;
261 	uint8_t			rt_tos;
262 	uint8_t			rt_protocol;
263 	uint8_t			rt_scope;
264 	uint8_t			rt_type;
265 	uint8_t			rt_nmetrics;
266 	uint32_t		rt_flags;
267 	struct nl_addr *	rt_dst;
268 	struct nl_addr *	rt_src;
269 	uint32_t		rt_table;
270 	uint32_t		rt_iif;
271 	uint32_t		rt_prio;
272 	uint32_t		rt_metrics[RTAX_MAX];
273 	uint32_t		rt_metrics_mask;
274 	uint32_t		rt_nr_nh;
275 	struct nl_addr *	rt_pref_src;
276 	struct nl_list_head	rt_nexthops;
277 	struct rtnl_rtcacheinfo	rt_cacheinfo;
278 	uint32_t		rt_flag_mask;
279 };
280 
281 struct rtnl_rule
282 {
283 	NLHDR_COMMON
284 
285 	uint64_t	r_mark;
286 	uint32_t	r_prio;
287 	uint32_t	r_realms;
288 	uint32_t	r_table;
289 	uint8_t		r_dsfield;
290 	uint8_t		r_type;
291 	uint8_t		r_family;
292 	uint8_t		r_src_len;
293 	uint8_t		r_dst_len;
294 	char		r_iif[IFNAMSIZ];
295 	struct nl_addr *r_src;
296 	struct nl_addr *r_dst;
297 	struct nl_addr *r_srcmap;
298 };
299 
300 struct rtnl_neightbl_parms
301 {
302 	/**
303 	 * Interface index of the device this parameter set is assigned
304 	 * to or 0 for the default set.
305 	 */
306 	uint32_t		ntp_ifindex;
307 
308 	/**
309 	 * Number of references to this parameter set.
310 	 */
311 	uint32_t		ntp_refcnt;
312 
313 	/**
314 	 * Queue length for pending arp requests, i.e. the number of
315 	 * packets which are accepted from other layers while the
316 	 * neighbour address is still being resolved
317 	 */
318 	uint32_t		ntp_queue_len;
319 
320 	/**
321 	 * Number of requests to send to the user level ARP daemon.
322 	 * Specify 0 to disable.
323 	 */
324 	uint32_t		ntp_app_probes;
325 
326 	/**
327 	 * Maximum number of retries for unicast solicitation.
328 	 */
329 	uint32_t		ntp_ucast_probes;
330 
331 	/**
332 	 * Maximum number of retries for multicast solicitation.
333 	 */
334 	uint32_t		ntp_mcast_probes;
335 
336 	/**
337 	 * Base value in milliseconds to ompute reachable time, see RFC2461.
338 	 */
339 	uint64_t		ntp_base_reachable_time;
340 
341 	/**
342 	 * Actual reachable time (read-only)
343 	 */
344 	uint64_t		ntp_reachable_time;	/* secs */
345 
346 	/**
347 	 * The time in milliseconds between retransmitted Neighbor
348 	 * Solicitation messages.
349 	 */
350 	uint64_t		ntp_retrans_time;
351 
352 	/**
353 	 * Interval in milliseconds to check for stale neighbour
354 	 * entries.
355 	 */
356 	uint64_t		ntp_gc_stale_time;	/* secs */
357 
358 	/**
359 	 * Delay in milliseconds for the first time probe if
360 	 * the neighbour is reachable.
361 	 */
362 	uint64_t		ntp_probe_delay;	/* secs */
363 
364 	/**
365 	 * Maximum delay in milliseconds of an answer to a neighbour
366 	 * solicitation message.
367 	 */
368 	uint64_t		ntp_anycast_delay;
369 
370 	/**
371 	 * Minimum age in milliseconds before a neighbour entry
372 	 * may be replaced.
373 	 */
374 	uint64_t		ntp_locktime;
375 
376 	/**
377 	 * Delay in milliseconds before answering to an ARP request
378 	 * for which a proxy ARP entry exists.
379 	 */
380 	uint64_t		ntp_proxy_delay;
381 
382 	/**
383 	 * Queue length for the delayed proxy arp requests.
384 	 */
385 	uint32_t		ntp_proxy_qlen;
386 
387 	/**
388 	 * Mask of available parameter attributes
389 	 */
390 	uint32_t		ntp_mask;
391 };
392 
393 #define NTBLNAMSIZ	32
394 
395 /**
396  * Neighbour table
397  * @ingroup neightbl
398  */
399 struct rtnl_neightbl
400 {
401 	NLHDR_COMMON
402 
403 	char			nt_name[NTBLNAMSIZ];
404 	uint32_t		nt_family;
405 	uint32_t		nt_gc_thresh1;
406 	uint32_t		nt_gc_thresh2;
407 	uint32_t		nt_gc_thresh3;
408 	uint64_t		nt_gc_interval;
409 	struct ndt_config	nt_config;
410 	struct rtnl_neightbl_parms nt_parms;
411 	struct ndt_stats	nt_stats;
412 };
413 
414 struct rtnl_ratespec
415 {
416 	uint8_t			rs_cell_log;
417 	uint16_t		rs_feature;
418 	uint16_t		rs_addend;
419 	uint16_t		rs_mpu;
420 	uint32_t		rs_rate;
421 };
422 
423 struct rtnl_tstats
424 {
425 	struct {
426 		uint64_t            bytes;
427 		uint64_t            packets;
428 	} tcs_basic;
429 
430 	struct {
431 		uint32_t            bps;
432 		uint32_t            pps;
433 	} tcs_rate_est;
434 
435 	struct {
436 		uint32_t            qlen;
437 		uint32_t            backlog;
438 		uint32_t            drops;
439 		uint32_t            requeues;
440 		uint32_t            overlimits;
441 	} tcs_queue;
442 };
443 
444 #define TCKINDSIZ	32
445 
446 #define NL_TCA_GENERIC(pre)				\
447 	NLHDR_COMMON					\
448 	uint32_t		pre ##_family;		\
449 	uint32_t		pre ##_ifindex;		\
450 	uint32_t		pre ##_handle;		\
451 	uint32_t		pre ##_parent;		\
452 	uint32_t		pre ##_info;		\
453 	char			pre ##_kind[TCKINDSIZ];	\
454 	struct nl_data *	pre ##_opts;		\
455 	uint64_t		pre ##_stats[RTNL_TC_STATS_MAX+1]; \
456 	struct nl_data *	pre ##_xstats;		\
457 	struct nl_data *	pre ##_subdata;		\
458 
459 
460 struct rtnl_tca
461 {
462 	NL_TCA_GENERIC(tc);
463 };
464 
465 struct rtnl_qdisc
466 {
467 	NL_TCA_GENERIC(q);
468 	struct rtnl_qdisc_ops	*q_ops;
469 };
470 
471 struct rtnl_class
472 {
473 	NL_TCA_GENERIC(c);
474 	struct rtnl_class_ops	*c_ops;
475 };
476 
477 struct rtnl_cls
478 {
479 	NL_TCA_GENERIC(c);
480 	uint16_t		c_prio;
481 	uint16_t		c_protocol;
482 	struct rtnl_cls_ops	*c_ops;
483 };
484 
485 struct rtnl_u32
486 {
487 	uint32_t		cu_divisor;
488 	uint32_t		cu_hash;
489 	uint32_t		cu_classid;
490 	uint32_t		cu_link;
491 	struct nl_data *	cu_pcnt;
492 	struct nl_data *	cu_selector;
493 	struct nl_data *	cu_act;
494 	struct nl_data *	cu_police;
495 	char			cu_indev[IFNAMSIZ];
496 	int			cu_mask;
497 };
498 
499 struct rtnl_cgroup
500 {
501 	struct rtnl_ematch_tree *cg_ematch;
502 	int			cg_mask;
503 };
504 
505 struct rtnl_fw
506 {
507 	uint32_t		cf_classid;
508 	struct nl_data *	cf_act;
509 	struct nl_data *	cf_police;
510 	char			cf_indev[IFNAMSIZ];
511 	int			cf_mask;
512 };
513 
514 struct rtnl_ematch
515 {
516 	uint16_t		e_id;
517 	uint16_t		e_kind;
518 	uint16_t		e_flags;
519 
520 	struct nl_list_head	e_childs;
521 	struct nl_list_head	e_list;
522 	struct rtnl_ematch_ops *e_ops;
523 
524 	char			e_data[0];
525 };
526 
527 struct rtnl_ematch_tree
528 {
529 	uint16_t		et_progid;
530 	struct nl_list_head	et_list;
531 
532 };
533 
534 struct rtnl_dsmark_qdisc
535 {
536 	uint16_t	qdm_indices;
537 	uint16_t	qdm_default_index;
538 	uint32_t	qdm_set_tc_index;
539 	uint32_t	qdm_mask;
540 };
541 
542 struct rtnl_dsmark_class
543 {
544 	uint8_t		cdm_bmask;
545 	uint8_t		cdm_value;
546 	uint32_t	cdm_mask;
547 };
548 
549 struct rtnl_fifo
550 {
551 	uint32_t	qf_limit;
552 	uint32_t	qf_mask;
553 };
554 
555 struct rtnl_prio
556 {
557 	uint32_t	qp_bands;
558 	uint8_t		qp_priomap[TC_PRIO_MAX+1];
559 	uint32_t	qp_mask;
560 };
561 
562 struct rtnl_tbf
563 {
564 	uint32_t		qt_limit;
565 	uint32_t		qt_mpu;
566 	struct rtnl_ratespec	qt_rate;
567 	uint32_t		qt_rate_bucket;
568 	uint32_t		qt_rate_txtime;
569 	struct rtnl_ratespec	qt_peakrate;
570 	uint32_t		qt_peakrate_bucket;
571 	uint32_t		qt_peakrate_txtime;
572 	uint32_t		qt_mask;
573 };
574 
575 struct rtnl_sfq
576 {
577 	uint32_t	qs_quantum;
578 	uint32_t	qs_perturb;
579 	uint32_t	qs_limit;
580 	uint32_t	qs_divisor;
581 	uint32_t	qs_flows;
582 	uint32_t	qs_mask;
583 };
584 
585 struct rtnl_netem_corr
586 {
587 	uint32_t	nmc_delay;
588 	uint32_t	nmc_loss;
589 	uint32_t	nmc_duplicate;
590 };
591 
592 struct rtnl_netem_reo
593 {
594 	uint32_t	nmro_probability;
595 	uint32_t	nmro_correlation;
596 };
597 
598 struct rtnl_netem_crpt
599 {
600 	uint32_t	nmcr_probability;
601 	uint32_t	nmcr_correlation;
602 };
603 
604 struct rtnl_netem_dist
605 {
606 	int16_t	*	dist_data;
607 	size_t		dist_size;
608 };
609 
610 struct rtnl_netem
611 {
612 	uint32_t		qnm_latency;
613 	uint32_t		qnm_limit;
614 	uint32_t		qnm_loss;
615 	uint32_t		qnm_gap;
616 	uint32_t		qnm_duplicate;
617 	uint32_t		qnm_jitter;
618 	uint32_t		qnm_mask;
619 	struct rtnl_netem_corr	qnm_corr;
620 	struct rtnl_netem_reo	qnm_ro;
621 	struct rtnl_netem_crpt	qnm_crpt;
622 	struct rtnl_netem_dist  qnm_dist;
623 };
624 
625 struct rtnl_htb_qdisc
626 {
627 	uint32_t		qh_rate2quantum;
628 	uint32_t		qh_defcls;
629 	uint32_t		qh_mask;
630 };
631 
632 struct rtnl_htb_class
633 {
634 	uint32_t		ch_prio;
635 	uint32_t		ch_mtu;
636 	struct rtnl_ratespec	ch_rate;
637 	struct rtnl_ratespec	ch_ceil;
638 	uint32_t		ch_rbuffer;
639 	uint32_t		ch_cbuffer;
640 	uint32_t		ch_quantum;
641 	uint8_t			ch_overhead;
642 	uint8_t			ch_mpu;
643 	uint32_t		ch_mask;
644 };
645 
646 struct rtnl_cbq
647 {
648 	struct tc_cbq_lssopt    cbq_lss;
649 	struct tc_ratespec      cbq_rate;
650 	struct tc_cbq_wrropt    cbq_wrr;
651 	struct tc_cbq_ovl       cbq_ovl;
652 	struct tc_cbq_fopt      cbq_fopt;
653 	struct tc_cbq_police    cbq_police;
654 };
655 
656 struct rtnl_red
657 {
658 	uint32_t	qr_limit;
659 	uint32_t	qr_qth_min;
660 	uint32_t	qr_qth_max;
661 	uint8_t		qr_flags;
662 	uint8_t		qr_wlog;
663 	uint8_t		qr_plog;
664 	uint8_t		qr_scell_log;
665 	uint32_t	qr_mask;
666 };
667 
668 struct flnl_request
669 {
670 	NLHDR_COMMON
671 
672 	struct nl_addr *	lr_addr;
673 	uint32_t		lr_fwmark;
674 	uint8_t			lr_tos;
675 	uint8_t			lr_scope;
676 	uint8_t			lr_table;
677 };
678 
679 
680 struct flnl_result
681 {
682 	NLHDR_COMMON
683 
684 	struct flnl_request *	fr_req;
685 	uint8_t			fr_table_id;
686 	uint8_t			fr_prefixlen;
687 	uint8_t			fr_nh_sel;
688 	uint8_t			fr_type;
689 	uint8_t			fr_scope;
690 	uint32_t		fr_error;
691 };
692 
693 #define GENL_OP_HAS_POLICY	1
694 #define GENL_OP_HAS_DOIT	2
695 #define GENL_OP_HAS_DUMPIT	4
696 
697 struct genl_family_op
698 {
699 	uint32_t		o_id;
700 	uint32_t		o_flags;
701 
702 	struct nl_list_head	o_list;
703 };
704 
705 struct genl_family
706 {
707 	NLHDR_COMMON
708 
709 	uint16_t		gf_id;
710 	char 			gf_name[GENL_NAMSIZ];
711 	uint32_t		gf_version;
712 	uint32_t		gf_hdrsize;
713 	uint32_t		gf_maxattr;
714 
715 	struct nl_list_head	gf_ops;
716 };
717 
718 union nfnl_ct_proto
719 {
720 	struct {
721 		uint16_t	src;
722 		uint16_t	dst;
723 	} port;
724 	struct {
725 		uint16_t	id;
726 		uint8_t		type;
727 		uint8_t		code;
728 	} icmp;
729 };
730 
731 struct nfnl_ct_dir {
732 	struct nl_addr *	src;
733 	struct nl_addr *	dst;
734 	union nfnl_ct_proto	proto;
735 	uint64_t		packets;
736 	uint64_t		bytes;
737 };
738 
739 union nfnl_ct_protoinfo {
740 	struct {
741 		uint8_t		state;
742 	} tcp;
743 };
744 
745 struct nfnl_ct {
746 	NLHDR_COMMON
747 
748 	uint8_t			ct_family;
749 	uint8_t			ct_proto;
750 	union nfnl_ct_protoinfo	ct_protoinfo;
751 
752 	uint32_t		ct_status;
753 	uint32_t		ct_status_mask;
754 	uint32_t		ct_timeout;
755 	uint32_t		ct_mark;
756 	uint32_t		ct_use;
757 	uint32_t		ct_id;
758 
759 	struct nfnl_ct_dir	ct_orig;
760 	struct nfnl_ct_dir	ct_repl;
761 };
762 
763 struct nfnl_log {
764 	NLHDR_COMMON
765 
766 	uint16_t		log_group;
767 	uint8_t			log_copy_mode;
768 	uint32_t		log_copy_range;
769 	uint32_t		log_flush_timeout;
770 	uint32_t		log_alloc_size;
771 	uint32_t		log_queue_threshold;
772 	uint32_t		log_flags;
773 	uint32_t		log_flag_mask;
774 };
775 
776 struct nfnl_log_msg {
777 	NLHDR_COMMON
778 
779 	uint8_t			log_msg_family;
780 	uint8_t			log_msg_hook;
781 	uint16_t		log_msg_hwproto;
782 	uint32_t		log_msg_mark;
783 	struct timeval		log_msg_timestamp;
784 	uint32_t		log_msg_indev;
785 	uint32_t		log_msg_outdev;
786 	uint32_t		log_msg_physindev;
787 	uint32_t		log_msg_physoutdev;
788 	uint8_t			log_msg_hwaddr[8];
789 	int			log_msg_hwaddr_len;
790 	void *			log_msg_payload;
791 	int			log_msg_payload_len;
792 	char *			log_msg_prefix;
793 	uint32_t		log_msg_uid;
794 	uint32_t		log_msg_gid;
795 	uint32_t		log_msg_seq;
796 	uint32_t		log_msg_seq_global;
797 };
798 
799 struct nfnl_queue {
800 	NLHDR_COMMON
801 
802 	uint16_t		queue_group;
803 	uint32_t		queue_maxlen;
804 	uint32_t		queue_copy_range;
805 	uint8_t			queue_copy_mode;
806 };
807 
808 struct nfnl_queue_msg {
809 	NLHDR_COMMON
810 
811 	uint16_t		queue_msg_group;
812 	uint8_t			queue_msg_family;
813 	uint8_t			queue_msg_hook;
814 	uint16_t		queue_msg_hwproto;
815 	uint32_t		queue_msg_packetid;
816 	uint32_t		queue_msg_mark;
817 	struct timeval		queue_msg_timestamp;
818 	uint32_t		queue_msg_indev;
819 	uint32_t		queue_msg_outdev;
820 	uint32_t		queue_msg_physindev;
821 	uint32_t		queue_msg_physoutdev;
822 	uint8_t			queue_msg_hwaddr[8];
823 	int			queue_msg_hwaddr_len;
824 	void *			queue_msg_payload;
825 	int			queue_msg_payload_len;
826 	uint32_t		queue_msg_verdict;
827 };
828 
829 #endif
830