Home | History | Annotate | Download | only in include
      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 (at) 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