netlink-types.h revision 23ee46ef7115c2e311c36e43a833e6c3deada18a
144d362409d5469aed47d19e7908d19bd194493aThomas Graf/*
244d362409d5469aed47d19e7908d19bd194493aThomas Graf * netlink-types.h	Netlink Types (Private)
344d362409d5469aed47d19e7908d19bd194493aThomas Graf *
444d362409d5469aed47d19e7908d19bd194493aThomas Graf *	This library is free software; you can redistribute it and/or
544d362409d5469aed47d19e7908d19bd194493aThomas Graf *	modify it under the terms of the GNU Lesser General Public
644d362409d5469aed47d19e7908d19bd194493aThomas Graf *	License as published by the Free Software Foundation version 2.1
744d362409d5469aed47d19e7908d19bd194493aThomas Graf *	of the License.
844d362409d5469aed47d19e7908d19bd194493aThomas Graf *
9535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
1044d362409d5469aed47d19e7908d19bd194493aThomas Graf */
1144d362409d5469aed47d19e7908d19bd194493aThomas Graf
1244d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef NETLINK_LOCAL_TYPES_H_
1344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NETLINK_LOCAL_TYPES_H_
1444d362409d5469aed47d19e7908d19bd194493aThomas Graf
1544d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/list.h>
1644d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/route/link.h>
1744d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/route/qdisc.h>
1844d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/route/rtnl.h>
1944d362409d5469aed47d19e7908d19bd194493aThomas Graf#include <netlink/route/route.h>
2044d362409d5469aed47d19e7908d19bd194493aThomas Graf
2144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_SOCK_BUFSIZE_SET	(1<<0)
2244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_SOCK_PASSCRED	(1<<1)
2344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_OWN_PORT		(1<<2)
2444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_MSG_PEEK		(1<<3)
2544d362409d5469aed47d19e7908d19bd194493aThomas Graf
2644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_MSG_CRED_PRESENT 1
2744d362409d5469aed47d19e7908d19bd194493aThomas Graf
2844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache_ops;
291155370f520cb64657e25153255cf7dc1424317fThomas Grafstruct nl_sock;
3044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_object;
3144d362409d5469aed47d19e7908d19bd194493aThomas Graf
3244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cb
3344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
3444d362409d5469aed47d19e7908d19bd194493aThomas Graf	nl_recvmsg_msg_cb_t	cb_set[NL_CB_TYPE_MAX+1];
3544d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			cb_args[NL_CB_TYPE_MAX+1];
3644d362409d5469aed47d19e7908d19bd194493aThomas Graf
3744d362409d5469aed47d19e7908d19bd194493aThomas Graf	nl_recvmsg_err_cb_t	cb_err;
3844d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			cb_err_arg;
3944d362409d5469aed47d19e7908d19bd194493aThomas Graf
4044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/** May be used to replace nl_recvmsgs with your own implementation
4144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * in all internal calls to nl_recvmsgs. */
421155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			(*cb_recvmsgs_ow)(struct nl_sock *,
4344d362409d5469aed47d19e7908d19bd194493aThomas Graf						  struct nl_cb *);
4444d362409d5469aed47d19e7908d19bd194493aThomas Graf
4544d362409d5469aed47d19e7908d19bd194493aThomas Graf	/** Overwrite internal calls to nl_recv, must return the number of
4644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * octets read and allocate a buffer for the received data. */
471155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			(*cb_recv_ow)(struct nl_sock *,
4844d362409d5469aed47d19e7908d19bd194493aThomas Graf					      struct sockaddr_nl *,
4944d362409d5469aed47d19e7908d19bd194493aThomas Graf					      unsigned char **,
5044d362409d5469aed47d19e7908d19bd194493aThomas Graf					      struct ucred **);
5144d362409d5469aed47d19e7908d19bd194493aThomas Graf
5244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/** Overwrites internal calls to nl_send, must send the netlink
5344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * message. */
541155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			(*cb_send_ow)(struct nl_sock *,
5544d362409d5469aed47d19e7908d19bd194493aThomas Graf					      struct nl_msg *);
5644d362409d5469aed47d19e7908d19bd194493aThomas Graf
5744d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cb_refcnt;
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
5944d362409d5469aed47d19e7908d19bd194493aThomas Graf
601155370f520cb64657e25153255cf7dc1424317fThomas Grafstruct nl_sock
6144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
621155370f520cb64657e25153255cf7dc1424317fThomas Graf	struct sockaddr_nl	s_local;
631155370f520cb64657e25153255cf7dc1424317fThomas Graf	struct sockaddr_nl	s_peer;
641155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			s_fd;
651155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			s_proto;
661155370f520cb64657e25153255cf7dc1424317fThomas Graf	unsigned int		s_seq_next;
671155370f520cb64657e25153255cf7dc1424317fThomas Graf	unsigned int		s_seq_expect;
681155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			s_flags;
691155370f520cb64657e25153255cf7dc1424317fThomas Graf	struct nl_cb *		s_cb;
7044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
7144d362409d5469aed47d19e7908d19bd194493aThomas Graf
7244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache
7344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
7444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	c_items;
7544d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			c_nitems;
7644d362409d5469aed47d19e7908d19bd194493aThomas Graf	int                     c_iarg1;
7744d362409d5469aed47d19e7908d19bd194493aThomas Graf	int                     c_iarg2;
7844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_cache_ops *   c_ops;
7944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
8044d362409d5469aed47d19e7908d19bd194493aThomas Graf
8144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache_assoc
8244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
8344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_cache *	ca_cache;
8444d362409d5469aed47d19e7908d19bd194493aThomas Graf	change_func_t		ca_change;
8544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
8644d362409d5469aed47d19e7908d19bd194493aThomas Graf
8744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache_mngr
8844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
8944d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cm_protocol;
9044d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cm_flags;
9144d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cm_nassocs;
921155370f520cb64657e25153255cf7dc1424317fThomas Graf	struct nl_sock *	cm_handle;
9344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_cache_assoc *	cm_assocs;
9444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
9544d362409d5469aed47d19e7908d19bd194493aThomas Graf
9644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_parser_param;
9744d362409d5469aed47d19e7908d19bd194493aThomas Graf
98535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf#define LOOSE_COMPARISON	1
9944d362409d5469aed47d19e7908d19bd194493aThomas Graf
10044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_OBJ_MARK		1
10144d362409d5469aed47d19e7908d19bd194493aThomas Graf
10244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_object
10344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
10444d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
10544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
10644d362409d5469aed47d19e7908d19bd194493aThomas Graf
10744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_data
10844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
10944d362409d5469aed47d19e7908d19bd194493aThomas Graf	size_t			d_size;
11044d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			d_data;
11144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
11244d362409d5469aed47d19e7908d19bd194493aThomas Graf
11344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_addr
11444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
11544d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			a_family;
11644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned int		a_maxsize;
11744d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned int		a_len;
11844d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			a_prefixlen;
11944d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			a_refcnt;
12044d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			a_addr[0];
12144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
12244d362409d5469aed47d19e7908d19bd194493aThomas Graf
12344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_msg
12444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
12544d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			nm_protocol;
12644d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			nm_flags;
12744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct sockaddr_nl	nm_src;
12844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct sockaddr_nl	nm_dst;
12944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ucred		nm_creds;
13044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nlmsghdr *	nm_nlh;
1316de17f3308cfd53ad922d144a1b28ddd962d6678Thomas Graf	size_t			nm_size;
13223ee46ef7115c2e311c36e43a833e6c3deada18aThomas Graf	int			nm_refcnt;
13344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
13444d362409d5469aed47d19e7908d19bd194493aThomas Graf
13544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_link_map
13644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
13744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t lm_mem_start;
13844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t lm_mem_end;
13944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t lm_base_addr;
14044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t lm_irq;
14144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t  lm_dma;
14244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t  lm_port;
14344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
14444d362409d5469aed47d19e7908d19bd194493aThomas Graf
14544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFQDISCSIZ	32
14644d362409d5469aed47d19e7908d19bd194493aThomas Graf
14744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_link
14844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
14944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
15044d362409d5469aed47d19e7908d19bd194493aThomas Graf
15144d362409d5469aed47d19e7908d19bd194493aThomas Graf	char		l_name[IFNAMSIZ];
15244d362409d5469aed47d19e7908d19bd194493aThomas Graf
15344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_family;
15444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_arptype;
15544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_index;
15644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_flags;
15744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_change;
15844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t 	l_mtu;
15944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_link;
16044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_txqlen;
16144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_weight;
16244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_master;
16344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *l_addr;
16444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *l_bcast;
16544d362409d5469aed47d19e7908d19bd194493aThomas Graf	char		l_qdisc[IFQDISCSIZ];
16644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_link_map l_map;
16744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t	l_stats[RTNL_LINK_STATS_MAX+1];
16844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_flag_mask;
1693ad4665be2f192291238cbe78118a57ec42436c6Thomas Graf	uint8_t		l_operstate;
1703ad4665be2f192291238cbe78118a57ec42436c6Thomas Graf	uint8_t		l_linkmode;
171a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	/* 2 byte hole */
172a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	struct rtnl_link_info_ops *l_info_ops;
173a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	void *		l_info;
17444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
17544d362409d5469aed47d19e7908d19bd194493aThomas Graf
17644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_ncacheinfo
17744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
17844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_confirmed;	/**< Time since neighbour validty was last confirmed */
17944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_used;	/**< Time since neighbour entry was last ued */
18044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_updated;	/**< Time since last update */
18144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_refcnt;	/**< Reference counter */
18244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
18344d362409d5469aed47d19e7908d19bd194493aThomas Graf
18444d362409d5469aed47d19e7908d19bd194493aThomas Graf
18544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neigh
18644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
18744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
18844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	n_family;
18944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	n_ifindex;
19044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	n_state;
19144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		n_flags;
19244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		n_type;
19344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *n_lladdr;
19444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *n_dst;
19544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	n_probes;
19644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ncacheinfo n_cacheinfo;
19744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t                n_state_mask;
19844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t                n_flag_mask;
19944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
20044d362409d5469aed47d19e7908d19bd194493aThomas Graf
20144d362409d5469aed47d19e7908d19bd194493aThomas Graf
20244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_addr_cacheinfo
20344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
20444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Preferred lifetime in seconds */
20544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_prefered;
20644d362409d5469aed47d19e7908d19bd194493aThomas Graf
20744d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Valid lifetime in seconds */
20844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_valid;
20944d362409d5469aed47d19e7908d19bd194493aThomas Graf
21044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Timestamp of creation in 1/100s seince boottime */
21144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_cstamp;
21244d362409d5469aed47d19e7908d19bd194493aThomas Graf
21344d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Timestamp of last update in 1/100s since boottime */
21444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_tstamp;
21544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
21644d362409d5469aed47d19e7908d19bd194493aThomas Graf
21744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_addr
21844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
21944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
22044d362409d5469aed47d19e7908d19bd194493aThomas Graf
22144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_family;
22244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_prefixlen;
22344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_flags;
22444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_scope;
22544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	a_ifindex;
22644d362409d5469aed47d19e7908d19bd194493aThomas Graf
22744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_peer;
22844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_local;
22944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_bcast;
23044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_anycast;
23144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_multicast;
23244d362409d5469aed47d19e7908d19bd194493aThomas Graf
23344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_addr_cacheinfo a_cacheinfo;
23444d362409d5469aed47d19e7908d19bd194493aThomas Graf
23544d362409d5469aed47d19e7908d19bd194493aThomas Graf	char a_label[IFNAMSIZ];
23644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t a_flag_mask;
23744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
23844d362409d5469aed47d19e7908d19bd194493aThomas Graf
23944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_nexthop
24044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
24144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_flags;
24244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_flag_mask;
24344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_weight;
24444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* 1 byte spare */
24544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rtnh_ifindex;
24644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rtnh_gateway;
247535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		ce_mask; /* HACK to support attr macros */
24844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	rtnh_list;
249535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rtnh_realms;
25044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
25144d362409d5469aed47d19e7908d19bd194493aThomas Graf
25244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_route
25344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
25444d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
25544d362409d5469aed47d19e7908d19bd194493aThomas Graf
25644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_family;
25744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_dst_len;
25844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_src_len;
25944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_tos;
26044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_protocol;
26144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_scope;
26244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_type;
263535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint8_t			rt_nmetrics;
26444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_flags;
26544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_dst;
26644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_src;
267535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rt_table;
268535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rt_iif;
26944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_prio;
27044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_metrics[RTAX_MAX];
27144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_metrics_mask;
272535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rt_nr_nh;
27344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_pref_src;
27444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	rt_nexthops;
27544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_rtcacheinfo	rt_cacheinfo;
27644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_flag_mask;
27744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
27844d362409d5469aed47d19e7908d19bd194493aThomas Graf
27944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_rule
28044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
28144d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
28244d362409d5469aed47d19e7908d19bd194493aThomas Graf
28344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t	r_mark;
28444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_prio;
28544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_realms;
28644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_table;
28744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_dsfield;
28844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_type;
28944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_family;
29044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_src_len;
29144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_dst_len;
29244d362409d5469aed47d19e7908d19bd194493aThomas Graf	char		r_iif[IFNAMSIZ];
29344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_src;
29444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_dst;
29544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_srcmap;
29644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
29744d362409d5469aed47d19e7908d19bd194493aThomas Graf
29844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neightbl_parms
29944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
30044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
30144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Interface index of the device this parameter set is assigned
30244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * to or 0 for the default set.
30344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
30444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_ifindex;
30544d362409d5469aed47d19e7908d19bd194493aThomas Graf
30644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
30744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Number of references to this parameter set.
30844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
30944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_refcnt;
31044d362409d5469aed47d19e7908d19bd194493aThomas Graf
31144d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
31244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Queue length for pending arp requests, i.e. the number of
31344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * packets which are accepted from other layers while the
31444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * neighbour address is still being resolved
31544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
31644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_queue_len;
31744d362409d5469aed47d19e7908d19bd194493aThomas Graf
31844d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
31944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Number of requests to send to the user level ARP daemon.
32044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Specify 0 to disable.
32144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
32244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_app_probes;
32344d362409d5469aed47d19e7908d19bd194493aThomas Graf
32444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
32544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum number of retries for unicast solicitation.
32644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
32744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_ucast_probes;
32844d362409d5469aed47d19e7908d19bd194493aThomas Graf
32944d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
33044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum number of retries for multicast solicitation.
33144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
33244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_mcast_probes;
33344d362409d5469aed47d19e7908d19bd194493aThomas Graf
33444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
33544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Base value in milliseconds to ompute reachable time, see RFC2461.
33644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
33744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_base_reachable_time;
33844d362409d5469aed47d19e7908d19bd194493aThomas Graf
33944d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
34044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Actual reachable time (read-only)
34144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
34244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_reachable_time;	/* secs */
34344d362409d5469aed47d19e7908d19bd194493aThomas Graf
34444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
34544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * The time in milliseconds between retransmitted Neighbor
34644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Solicitation messages.
34744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
34844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_retrans_time;
34944d362409d5469aed47d19e7908d19bd194493aThomas Graf
35044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
35144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Interval in milliseconds to check for stale neighbour
35244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * entries.
35344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
35444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_gc_stale_time;	/* secs */
35544d362409d5469aed47d19e7908d19bd194493aThomas Graf
35644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
35744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Delay in milliseconds for the first time probe if
35844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * the neighbour is reachable.
35944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
36044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_probe_delay;	/* secs */
36144d362409d5469aed47d19e7908d19bd194493aThomas Graf
36244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
36344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum delay in milliseconds of an answer to a neighbour
36444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * solicitation message.
36544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
36644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_anycast_delay;
36744d362409d5469aed47d19e7908d19bd194493aThomas Graf
36844d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
36944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Minimum age in milliseconds before a neighbour entry
37044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * may be replaced.
37144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
37244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_locktime;
37344d362409d5469aed47d19e7908d19bd194493aThomas Graf
37444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
37544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Delay in milliseconds before answering to an ARP request
37644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * for which a proxy ARP entry exists.
37744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
37844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_proxy_delay;
37944d362409d5469aed47d19e7908d19bd194493aThomas Graf
38044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
38144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Queue length for the delayed proxy arp requests.
38244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
38344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_proxy_qlen;
38444d362409d5469aed47d19e7908d19bd194493aThomas Graf
38544d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
38644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Mask of available parameter attributes
38744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
38844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_mask;
38944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
39044d362409d5469aed47d19e7908d19bd194493aThomas Graf
39144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NTBLNAMSIZ	32
39244d362409d5469aed47d19e7908d19bd194493aThomas Graf
39344d362409d5469aed47d19e7908d19bd194493aThomas Graf/**
39444d362409d5469aed47d19e7908d19bd194493aThomas Graf * Neighbour table
39544d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup neightbl
39644d362409d5469aed47d19e7908d19bd194493aThomas Graf */
39744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neightbl
39844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
39944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
40044d362409d5469aed47d19e7908d19bd194493aThomas Graf
40144d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			nt_name[NTBLNAMSIZ];
40244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_family;
40344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh1;
40444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh2;
40544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh3;
40644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		nt_gc_interval;
40744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ndt_config	nt_config;
40844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_neightbl_parms nt_parms;
40944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ndt_stats	nt_stats;
41044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
41144d362409d5469aed47d19e7908d19bd194493aThomas Graf
41244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_ratespec
41344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
41444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rs_cell_log;
41544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_feature;
41644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_addend;
41744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_mpu;
41844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rs_rate;
41944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
42044d362409d5469aed47d19e7908d19bd194493aThomas Graf
42144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tstats
42244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
42344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
42444d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint64_t            bytes;
42544d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint64_t            packets;
42644d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_basic;
42744d362409d5469aed47d19e7908d19bd194493aThomas Graf
42844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
42944d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            bps;
43044d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            pps;
43144d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_rate_est;
43244d362409d5469aed47d19e7908d19bd194493aThomas Graf
43344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
43444d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            qlen;
43544d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            backlog;
43644d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            drops;
43744d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            requeues;
43844d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            overlimits;
43944d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_queue;
44044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
44144d362409d5469aed47d19e7908d19bd194493aThomas Graf
44244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCKINDSIZ	32
44344d362409d5469aed47d19e7908d19bd194493aThomas Graf
44444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_TCA_GENERIC(pre)				\
44544d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON					\
44644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_family;		\
44744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_ifindex;		\
44844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_handle;		\
44944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_parent;		\
45044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_info;		\
45144d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			pre ##_kind[TCKINDSIZ];	\
45244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	pre ##_opts;		\
45344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		pre ##_stats[RTNL_TC_STATS_MAX+1]; \
45444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	pre ##_xstats;		\
45544d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			pre ##_subdata;		\
45644d362409d5469aed47d19e7908d19bd194493aThomas Graf
45744d362409d5469aed47d19e7908d19bd194493aThomas Graf
45844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tca
45944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
46044d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(tc);
46144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
46244d362409d5469aed47d19e7908d19bd194493aThomas Graf
46344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_qdisc
46444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
46544d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(q);
46644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_qdisc_ops	*q_ops;
46744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
46844d362409d5469aed47d19e7908d19bd194493aThomas Graf
46944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_class
47044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
47144d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(c);
47244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_class_ops	*c_ops;
47344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
47444d362409d5469aed47d19e7908d19bd194493aThomas Graf
47544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_cls
47644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
47744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(c);
47844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	c_prio;
47944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	c_protocol;
48044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_cls_ops	*c_ops;
48144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
48244d362409d5469aed47d19e7908d19bd194493aThomas Graf
48344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_u32
48444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
48544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_divisor;
48644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_hash;
48744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_classid;
48844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_link;
48944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_pcnt;
49044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_selector;
49144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_act;
49244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_police;
49344d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			cu_indev[IFNAMSIZ];
49444d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cu_mask;
49544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
49644d362409d5469aed47d19e7908d19bd194493aThomas Graf
49744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_fw
49844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
49944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cf_classid;
50044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cf_act;
50144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cf_police;
50244d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			cf_indev[IFNAMSIZ];
50344d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cf_mask;
50444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
50544d362409d5469aed47d19e7908d19bd194493aThomas Graf
50644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_dsmark_qdisc
50744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
50844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	qdm_indices;
50944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	qdm_default_index;
51044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qdm_set_tc_index;
51144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qdm_mask;
51244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
51344d362409d5469aed47d19e7908d19bd194493aThomas Graf
51444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_dsmark_class
51544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
51644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		cdm_bmask;
51744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		cdm_value;
51844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	cdm_mask;
51944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
52044d362409d5469aed47d19e7908d19bd194493aThomas Graf
52144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_fifo
52244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
52344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qf_limit;
52444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qf_mask;
52544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
52644d362409d5469aed47d19e7908d19bd194493aThomas Graf
52744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_prio
52844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
52944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qp_bands;
53044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qp_priomap[TC_PRIO_MAX+1];
53144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qp_mask;
53244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
53344d362409d5469aed47d19e7908d19bd194493aThomas Graf
53444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tbf
53544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
53644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_limit;
53744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_mpu;
53844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	qt_rate;
53944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_rate_bucket;
54044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_rate_txtime;
54144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	qt_peakrate;
54244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_peakrate_bucket;
54344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_peakrate_txtime;
54444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_mask;
54544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
54644d362409d5469aed47d19e7908d19bd194493aThomas Graf
54744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_sfq
54844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
54944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_quantum;
55044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_perturb;
55144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_limit;
55244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_divisor;
55344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_flows;
55444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_mask;
55544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
55644d362409d5469aed47d19e7908d19bd194493aThomas Graf
55744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem_corr
55844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
55944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_delay;
56044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_loss;
56144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_duplicate;
56244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
56344d362409d5469aed47d19e7908d19bd194493aThomas Graf
56444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem_reo
56544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
56644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmro_probability;
56744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmro_correlation;
56844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
56944d362409d5469aed47d19e7908d19bd194493aThomas Graf
570241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollarstruct rtnl_netem_crpt
571241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar{
572241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	uint32_t	nmcr_probability;
573241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	uint32_t	nmcr_correlation;
574241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar};
575241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar
576241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollarstruct rtnl_netem_dist
577241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar{
578241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	int16_t	*	dist_data;
579241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	size_t		dist_size;
580241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar};
581241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar
58244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem
58344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
58444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_latency;
58544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_limit;
58644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_loss;
58744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_gap;
58844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_duplicate;
58944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_jitter;
59044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_mask;
59144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_netem_corr	qnm_corr;
59244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_netem_reo	qnm_ro;
593241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	struct rtnl_netem_crpt	qnm_crpt;
594241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	struct rtnl_netem_dist  qnm_dist;
59544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
59644d362409d5469aed47d19e7908d19bd194493aThomas Graf
59744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_htb_qdisc
59844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
59944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_rate2quantum;
60044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_defcls;
60144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_mask;
60244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
60344d362409d5469aed47d19e7908d19bd194493aThomas Graf
60444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_htb_class
60544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
60644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_prio;
60744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_mtu;
60844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	ch_rate;
60944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	ch_ceil;
61044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_rbuffer;
61144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_cbuffer;
61244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_quantum;
61344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ch_overhead;
61444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ch_mpu;
61544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_mask;
61644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
61744d362409d5469aed47d19e7908d19bd194493aThomas Graf
61844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_cbq
61944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
62044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_lssopt    cbq_lss;
62144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_ratespec      cbq_rate;
62244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_wrropt    cbq_wrr;
62344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_ovl       cbq_ovl;
62444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_fopt      cbq_fopt;
62544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_police    cbq_police;
62644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
62744d362409d5469aed47d19e7908d19bd194493aThomas Graf
62844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_red
62944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
63044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_limit;
63144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_qth_min;
63244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_qth_max;
63344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_flags;
63444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_wlog;
63544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_plog;
63644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_scell_log;
63744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_mask;
63844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
63944d362409d5469aed47d19e7908d19bd194493aThomas Graf
64044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct flnl_request
64144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
64244d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
64344d362409d5469aed47d19e7908d19bd194493aThomas Graf
64444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	lr_addr;
64544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		lr_fwmark;
64644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_tos;
64744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_scope;
64844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_table;
64944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
65044d362409d5469aed47d19e7908d19bd194493aThomas Graf
65144d362409d5469aed47d19e7908d19bd194493aThomas Graf
65244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct flnl_result
65344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
65444d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
65544d362409d5469aed47d19e7908d19bd194493aThomas Graf
65644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct flnl_request *	fr_req;
65744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_table_id;
65844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_prefixlen;
65944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_nh_sel;
66044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_type;
66144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_scope;
66244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		fr_error;
66344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
66444d362409d5469aed47d19e7908d19bd194493aThomas Graf
66544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_POLICY	1
66644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_DOIT	2
66744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_DUMPIT	4
66844d362409d5469aed47d19e7908d19bd194493aThomas Graf
66944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_family_op
67044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
67144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		o_id;
67244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		o_flags;
67344d362409d5469aed47d19e7908d19bd194493aThomas Graf
67444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	o_list;
67544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
67644d362409d5469aed47d19e7908d19bd194493aThomas Graf
67744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_family
67844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
67944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
68044d362409d5469aed47d19e7908d19bd194493aThomas Graf
68144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		gf_id;
68244d362409d5469aed47d19e7908d19bd194493aThomas Graf	char 			gf_name[GENL_NAMSIZ];
68344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_version;
68444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_hdrsize;
68544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_maxattr;
68644d362409d5469aed47d19e7908d19bd194493aThomas Graf
68744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	gf_ops;
68844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
68944d362409d5469aed47d19e7908d19bd194493aThomas Graf
69044d362409d5469aed47d19e7908d19bd194493aThomas Grafunion nfnl_ct_proto
69144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
69244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
69344d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	src;
69444d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	dst;
69544d362409d5469aed47d19e7908d19bd194493aThomas Graf	} port;
69644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
69744d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	id;
69844d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		type;
69944d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		code;
70044d362409d5469aed47d19e7908d19bd194493aThomas Graf	} icmp;
70144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
70244d362409d5469aed47d19e7908d19bd194493aThomas Graf
70344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_ct_dir {
70444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	src;
70544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	dst;
70644d362409d5469aed47d19e7908d19bd194493aThomas Graf	union nfnl_ct_proto	proto;
70744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		packets;
70844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		bytes;
70944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
71044d362409d5469aed47d19e7908d19bd194493aThomas Graf
71144d362409d5469aed47d19e7908d19bd194493aThomas Grafunion nfnl_ct_protoinfo {
71244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
71344d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		state;
71444d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcp;
71544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
71644d362409d5469aed47d19e7908d19bd194493aThomas Graf
71744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_ct {
71844d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
71944d362409d5469aed47d19e7908d19bd194493aThomas Graf
72044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ct_family;
72144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ct_proto;
72244d362409d5469aed47d19e7908d19bd194493aThomas Graf	union nfnl_ct_protoinfo	ct_protoinfo;
72344d362409d5469aed47d19e7908d19bd194493aThomas Graf
72444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_status;
725cbe8902265ccc9f6aa6453aeb3a2a4631ed0eb01Philip Craig	uint32_t		ct_status_mask;
72644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_timeout;
72744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_mark;
72844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_use;
72944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_id;
73044d362409d5469aed47d19e7908d19bd194493aThomas Graf
73144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nfnl_ct_dir	ct_orig;
73244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nfnl_ct_dir	ct_repl;
73344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
73444d362409d5469aed47d19e7908d19bd194493aThomas Graf
73544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_log {
73644d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
73744d362409d5469aed47d19e7908d19bd194493aThomas Graf
7382f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint16_t		log_group;
7392f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_copy_mode;
7402f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_copy_range;
7412f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_flush_timeout;
7422f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_alloc_size;
7432f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_queue_threshold;
7442f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_flags;
7452f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_flag_mask;
7462f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy};
7472f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
7482f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystruct nfnl_log_msg {
7492f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	NLHDR_COMMON
7502f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
7512f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_msg_family;
7522f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_msg_hook;
7532f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint16_t		log_msg_hwproto;
7542f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_mark;
7552f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	struct timeval		log_msg_timestamp;
7562f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_indev;
7572f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_outdev;
7582f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_physindev;
7592f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_physoutdev;
7602f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_msg_hwaddr[8];
7612f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	int			log_msg_hwaddr_len;
7622f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	void *			log_msg_payload;
7632f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	int			log_msg_payload_len;
7642f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	char *			log_msg_prefix;
7652f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_uid;
7662f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_gid;
7672f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_seq;
7682f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_seq_global;
76944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
77044d362409d5469aed47d19e7908d19bd194493aThomas Graf
771e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystruct nfnl_queue {
772e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	NLHDR_COMMON
773e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
774e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_group;
775e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_maxlen;
776e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_copy_range;
777e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_copy_mode;
778e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy};
779e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
780e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystruct nfnl_queue_msg {
781e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	NLHDR_COMMON
782e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
783e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_msg_group;
784e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_family;
785e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_hook;
786e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_msg_hwproto;
787e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_packetid;
788e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_mark;
789e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	struct timeval		queue_msg_timestamp;
790e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_indev;
791e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_outdev;
792e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_physindev;
793e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_physoutdev;
794e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_hwaddr[8];
795e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	int			queue_msg_hwaddr_len;
796e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	void *			queue_msg_payload;
797e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	int			queue_msg_payload_len;
798e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_verdict;
799e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy};
800e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
80144d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
802