netlink-types.h revision 241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4
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;
2944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_handle;
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. */
4244d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			(*cb_recvmsgs_ow)(struct nl_handle *,
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. */
4744d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			(*cb_recv_ow)(struct nl_handle *,
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. */
5444d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			(*cb_send_ow)(struct nl_handle *,
5544d362409d5469aed47d19e7908d19bd194493aThomas Graf					      struct nl_msg *);
5644d362409d5469aed47d19e7908d19bd194493aThomas Graf
5744d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cb_refcnt;
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
5944d362409d5469aed47d19e7908d19bd194493aThomas Graf
6044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_handle
6144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
6244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct sockaddr_nl	h_local;
6344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct sockaddr_nl	h_peer;
6444d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			h_fd;
6544d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			h_proto;
6644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned int		h_seq_next;
6744d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned int		h_seq_expect;
6844d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			h_flags;
6944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_cb *		h_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;
9244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_handle *	cm_handle;
9344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_cache_assoc *	cm_assocs;
9444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
9544d362409d5469aed47d19e7908d19bd194493aThomas Graf
9644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_parser_param;
9744d362409d5469aed47d19e7908d19bd194493aThomas Graf
9844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_info
9944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
10044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct sockaddr_nl *	who;
10144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nlmsghdr *	nlh;
10244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct genlmsghdr *	genlhdr;
10344d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			userhdr;
10444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nlattr **	attrs;
10544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
10644d362409d5469aed47d19e7908d19bd194493aThomas Graf
107535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf#define LOOSE_COMPARISON	1
10844d362409d5469aed47d19e7908d19bd194493aThomas Graf
10944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_OBJ_MARK		1
11044d362409d5469aed47d19e7908d19bd194493aThomas Graf
11144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_object
11244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
11344d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
11444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
11544d362409d5469aed47d19e7908d19bd194493aThomas Graf
11644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_data
11744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
11844d362409d5469aed47d19e7908d19bd194493aThomas Graf	size_t			d_size;
11944d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			d_data;
12044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
12144d362409d5469aed47d19e7908d19bd194493aThomas Graf
12244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_addr
12344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
12444d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			a_family;
12544d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned int		a_maxsize;
12644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned int		a_len;
12744d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			a_prefixlen;
12844d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			a_refcnt;
12944d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			a_addr[0];
13044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
13144d362409d5469aed47d19e7908d19bd194493aThomas Graf
13244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_msg
13344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
13444d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			nm_protocol;
13544d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			nm_flags;
13644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct sockaddr_nl	nm_src;
13744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct sockaddr_nl	nm_dst;
13844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ucred		nm_creds;
13944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nlmsghdr *	nm_nlh;
1406de17f3308cfd53ad922d144a1b28ddd962d6678Thomas Graf	size_t			nm_size;
14144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
14244d362409d5469aed47d19e7908d19bd194493aThomas Graf
14344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_link_map
14444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
14544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t lm_mem_start;
14644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t lm_mem_end;
14744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t lm_base_addr;
14844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t lm_irq;
14944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t  lm_dma;
15044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t  lm_port;
15144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
15244d362409d5469aed47d19e7908d19bd194493aThomas Graf
15344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFQDISCSIZ	32
15444d362409d5469aed47d19e7908d19bd194493aThomas Graf
15544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_link
15644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
15744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
15844d362409d5469aed47d19e7908d19bd194493aThomas Graf
15944d362409d5469aed47d19e7908d19bd194493aThomas Graf	char		l_name[IFNAMSIZ];
16044d362409d5469aed47d19e7908d19bd194493aThomas Graf
16144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_family;
16244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_arptype;
16344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_index;
16444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_flags;
16544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_change;
16644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t 	l_mtu;
16744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_link;
16844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_txqlen;
16944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_weight;
17044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_master;
17144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *l_addr;
17244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *l_bcast;
17344d362409d5469aed47d19e7908d19bd194493aThomas Graf	char		l_qdisc[IFQDISCSIZ];
17444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_link_map l_map;
17544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t	l_stats[RTNL_LINK_STATS_MAX+1];
17644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_flag_mask;
1773ad4665be2f192291238cbe78118a57ec42436c6Thomas Graf	uint8_t		l_operstate;
1783ad4665be2f192291238cbe78118a57ec42436c6Thomas Graf	uint8_t		l_linkmode;
179a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	/* 2 byte hole */
180a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	struct rtnl_link_info_ops *l_info_ops;
181a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	void *		l_info;
18244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
18344d362409d5469aed47d19e7908d19bd194493aThomas Graf
18444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_ncacheinfo
18544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
18644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_confirmed;	/**< Time since neighbour validty was last confirmed */
18744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_used;	/**< Time since neighbour entry was last ued */
18844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_updated;	/**< Time since last update */
18944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_refcnt;	/**< Reference counter */
19044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
19144d362409d5469aed47d19e7908d19bd194493aThomas Graf
19244d362409d5469aed47d19e7908d19bd194493aThomas Graf
19344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neigh
19444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
19544d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
19644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	n_family;
19744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	n_ifindex;
19844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	n_state;
19944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		n_flags;
20044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		n_type;
20144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *n_lladdr;
20244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *n_dst;
20344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	n_probes;
20444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ncacheinfo n_cacheinfo;
20544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t                n_state_mask;
20644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t                n_flag_mask;
20744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
20844d362409d5469aed47d19e7908d19bd194493aThomas Graf
20944d362409d5469aed47d19e7908d19bd194493aThomas Graf
21044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_addr_cacheinfo
21144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
21244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Preferred lifetime in seconds */
21344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_prefered;
21444d362409d5469aed47d19e7908d19bd194493aThomas Graf
21544d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Valid lifetime in seconds */
21644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_valid;
21744d362409d5469aed47d19e7908d19bd194493aThomas Graf
21844d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Timestamp of creation in 1/100s seince boottime */
21944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_cstamp;
22044d362409d5469aed47d19e7908d19bd194493aThomas Graf
22144d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Timestamp of last update in 1/100s since boottime */
22244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_tstamp;
22344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
22444d362409d5469aed47d19e7908d19bd194493aThomas Graf
22544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_addr
22644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
22744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
22844d362409d5469aed47d19e7908d19bd194493aThomas Graf
22944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_family;
23044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_prefixlen;
23144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_flags;
23244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_scope;
23344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	a_ifindex;
23444d362409d5469aed47d19e7908d19bd194493aThomas Graf
23544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_peer;
23644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_local;
23744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_bcast;
23844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_anycast;
23944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_multicast;
24044d362409d5469aed47d19e7908d19bd194493aThomas Graf
24144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_addr_cacheinfo a_cacheinfo;
24244d362409d5469aed47d19e7908d19bd194493aThomas Graf
24344d362409d5469aed47d19e7908d19bd194493aThomas Graf	char a_label[IFNAMSIZ];
24444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t a_flag_mask;
24544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
24644d362409d5469aed47d19e7908d19bd194493aThomas Graf
24744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_nexthop
24844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
24944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_flags;
25044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_flag_mask;
25144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_weight;
25244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* 1 byte spare */
25344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rtnh_ifindex;
25444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rtnh_gateway;
255535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		ce_mask; /* HACK to support attr macros */
25644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	rtnh_list;
257535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rtnh_realms;
25844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
25944d362409d5469aed47d19e7908d19bd194493aThomas Graf
26044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_route
26144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
26244d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
26344d362409d5469aed47d19e7908d19bd194493aThomas Graf
26444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_family;
26544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_dst_len;
26644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_src_len;
26744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_tos;
26844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_protocol;
26944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_scope;
27044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_type;
271535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint8_t			rt_nmetrics;
27244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_flags;
27344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_dst;
27444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_src;
275535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rt_table;
276535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rt_iif;
27744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_prio;
27844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_metrics[RTAX_MAX];
27944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_metrics_mask;
280535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rt_nr_nh;
28144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_pref_src;
28244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	rt_nexthops;
28344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_rtcacheinfo	rt_cacheinfo;
28444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_flag_mask;
28544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
28644d362409d5469aed47d19e7908d19bd194493aThomas Graf
28744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_rule
28844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
28944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
29044d362409d5469aed47d19e7908d19bd194493aThomas Graf
29144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t	r_mark;
29244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_prio;
29344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_realms;
29444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_table;
29544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_dsfield;
29644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_type;
29744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_family;
29844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_src_len;
29944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_dst_len;
30044d362409d5469aed47d19e7908d19bd194493aThomas Graf	char		r_iif[IFNAMSIZ];
30144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_src;
30244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_dst;
30344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_srcmap;
30444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
30544d362409d5469aed47d19e7908d19bd194493aThomas Graf
30644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neightbl_parms
30744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
30844d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
30944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Interface index of the device this parameter set is assigned
31044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * to or 0 for the default set.
31144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
31244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_ifindex;
31344d362409d5469aed47d19e7908d19bd194493aThomas Graf
31444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
31544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Number of references to this parameter set.
31644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
31744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_refcnt;
31844d362409d5469aed47d19e7908d19bd194493aThomas Graf
31944d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
32044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Queue length for pending arp requests, i.e. the number of
32144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * packets which are accepted from other layers while the
32244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * neighbour address is still being resolved
32344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
32444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_queue_len;
32544d362409d5469aed47d19e7908d19bd194493aThomas Graf
32644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
32744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Number of requests to send to the user level ARP daemon.
32844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Specify 0 to disable.
32944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
33044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_app_probes;
33144d362409d5469aed47d19e7908d19bd194493aThomas Graf
33244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
33344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum number of retries for unicast solicitation.
33444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
33544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_ucast_probes;
33644d362409d5469aed47d19e7908d19bd194493aThomas Graf
33744d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
33844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum number of retries for multicast solicitation.
33944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
34044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_mcast_probes;
34144d362409d5469aed47d19e7908d19bd194493aThomas Graf
34244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
34344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Base value in milliseconds to ompute reachable time, see RFC2461.
34444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
34544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_base_reachable_time;
34644d362409d5469aed47d19e7908d19bd194493aThomas Graf
34744d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
34844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Actual reachable time (read-only)
34944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
35044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_reachable_time;	/* secs */
35144d362409d5469aed47d19e7908d19bd194493aThomas Graf
35244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
35344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * The time in milliseconds between retransmitted Neighbor
35444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Solicitation messages.
35544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
35644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_retrans_time;
35744d362409d5469aed47d19e7908d19bd194493aThomas Graf
35844d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
35944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Interval in milliseconds to check for stale neighbour
36044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * entries.
36144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
36244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_gc_stale_time;	/* secs */
36344d362409d5469aed47d19e7908d19bd194493aThomas Graf
36444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
36544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Delay in milliseconds for the first time probe if
36644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * the neighbour is reachable.
36744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
36844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_probe_delay;	/* secs */
36944d362409d5469aed47d19e7908d19bd194493aThomas Graf
37044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
37144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum delay in milliseconds of an answer to a neighbour
37244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * solicitation message.
37344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
37444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_anycast_delay;
37544d362409d5469aed47d19e7908d19bd194493aThomas Graf
37644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
37744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Minimum age in milliseconds before a neighbour entry
37844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * may be replaced.
37944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
38044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_locktime;
38144d362409d5469aed47d19e7908d19bd194493aThomas Graf
38244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
38344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Delay in milliseconds before answering to an ARP request
38444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * for which a proxy ARP entry exists.
38544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
38644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_proxy_delay;
38744d362409d5469aed47d19e7908d19bd194493aThomas Graf
38844d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
38944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Queue length for the delayed proxy arp requests.
39044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
39144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_proxy_qlen;
39244d362409d5469aed47d19e7908d19bd194493aThomas Graf
39344d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
39444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Mask of available parameter attributes
39544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
39644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_mask;
39744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
39844d362409d5469aed47d19e7908d19bd194493aThomas Graf
39944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NTBLNAMSIZ	32
40044d362409d5469aed47d19e7908d19bd194493aThomas Graf
40144d362409d5469aed47d19e7908d19bd194493aThomas Graf/**
40244d362409d5469aed47d19e7908d19bd194493aThomas Graf * Neighbour table
40344d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup neightbl
40444d362409d5469aed47d19e7908d19bd194493aThomas Graf */
40544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neightbl
40644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
40744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
40844d362409d5469aed47d19e7908d19bd194493aThomas Graf
40944d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			nt_name[NTBLNAMSIZ];
41044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_family;
41144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh1;
41244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh2;
41344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh3;
41444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		nt_gc_interval;
41544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ndt_config	nt_config;
41644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_neightbl_parms nt_parms;
41744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ndt_stats	nt_stats;
41844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
41944d362409d5469aed47d19e7908d19bd194493aThomas Graf
42044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_ratespec
42144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
42244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rs_cell_log;
42344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_feature;
42444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_addend;
42544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_mpu;
42644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rs_rate;
42744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
42844d362409d5469aed47d19e7908d19bd194493aThomas Graf
42944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tstats
43044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
43144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
43244d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint64_t            bytes;
43344d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint64_t            packets;
43444d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_basic;
43544d362409d5469aed47d19e7908d19bd194493aThomas Graf
43644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
43744d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            bps;
43844d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            pps;
43944d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_rate_est;
44044d362409d5469aed47d19e7908d19bd194493aThomas Graf
44144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
44244d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            qlen;
44344d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            backlog;
44444d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            drops;
44544d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            requeues;
44644d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            overlimits;
44744d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_queue;
44844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
44944d362409d5469aed47d19e7908d19bd194493aThomas Graf
45044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCKINDSIZ	32
45144d362409d5469aed47d19e7908d19bd194493aThomas Graf
45244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_TCA_GENERIC(pre)				\
45344d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON					\
45444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_family;		\
45544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_ifindex;		\
45644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_handle;		\
45744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_parent;		\
45844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_info;		\
45944d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			pre ##_kind[TCKINDSIZ];	\
46044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	pre ##_opts;		\
46144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		pre ##_stats[RTNL_TC_STATS_MAX+1]; \
46244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	pre ##_xstats;		\
46344d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			pre ##_subdata;		\
46444d362409d5469aed47d19e7908d19bd194493aThomas Graf
46544d362409d5469aed47d19e7908d19bd194493aThomas Graf
46644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tca
46744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
46844d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(tc);
46944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
47044d362409d5469aed47d19e7908d19bd194493aThomas Graf
47144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_qdisc
47244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
47344d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(q);
47444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_qdisc_ops	*q_ops;
47544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
47644d362409d5469aed47d19e7908d19bd194493aThomas Graf
47744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_class
47844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
47944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(c);
48044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_class_ops	*c_ops;
48144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
48244d362409d5469aed47d19e7908d19bd194493aThomas Graf
48344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_cls
48444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
48544d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(c);
48644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	c_prio;
48744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	c_protocol;
48844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_cls_ops	*c_ops;
48944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
49044d362409d5469aed47d19e7908d19bd194493aThomas Graf
49144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_u32
49244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
49344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_divisor;
49444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_hash;
49544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_classid;
49644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_link;
49744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_pcnt;
49844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_selector;
49944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_act;
50044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_police;
50144d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			cu_indev[IFNAMSIZ];
50244d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cu_mask;
50344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
50444d362409d5469aed47d19e7908d19bd194493aThomas Graf
50544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_fw
50644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
50744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cf_classid;
50844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cf_act;
50944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cf_police;
51044d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			cf_indev[IFNAMSIZ];
51144d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cf_mask;
51244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
51344d362409d5469aed47d19e7908d19bd194493aThomas Graf
51444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_dsmark_qdisc
51544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
51644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	qdm_indices;
51744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	qdm_default_index;
51844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qdm_set_tc_index;
51944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qdm_mask;
52044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
52144d362409d5469aed47d19e7908d19bd194493aThomas Graf
52244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_dsmark_class
52344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
52444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		cdm_bmask;
52544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		cdm_value;
52644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	cdm_mask;
52744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
52844d362409d5469aed47d19e7908d19bd194493aThomas Graf
52944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_fifo
53044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
53144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qf_limit;
53244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qf_mask;
53344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
53444d362409d5469aed47d19e7908d19bd194493aThomas Graf
53544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_prio
53644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
53744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qp_bands;
53844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qp_priomap[TC_PRIO_MAX+1];
53944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qp_mask;
54044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
54144d362409d5469aed47d19e7908d19bd194493aThomas Graf
54244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tbf
54344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
54444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_limit;
54544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_mpu;
54644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	qt_rate;
54744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_rate_bucket;
54844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_rate_txtime;
54944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	qt_peakrate;
55044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_peakrate_bucket;
55144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_peakrate_txtime;
55244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_mask;
55344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
55444d362409d5469aed47d19e7908d19bd194493aThomas Graf
55544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_sfq
55644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
55744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_quantum;
55844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_perturb;
55944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_limit;
56044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_divisor;
56144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_flows;
56244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_mask;
56344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
56444d362409d5469aed47d19e7908d19bd194493aThomas Graf
56544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem_corr
56644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
56744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_delay;
56844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_loss;
56944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_duplicate;
57044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
57144d362409d5469aed47d19e7908d19bd194493aThomas Graf
57244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem_reo
57344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
57444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmro_probability;
57544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmro_correlation;
57644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
57744d362409d5469aed47d19e7908d19bd194493aThomas Graf
578241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollarstruct rtnl_netem_crpt
579241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar{
580241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	uint32_t	nmcr_probability;
581241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	uint32_t	nmcr_correlation;
582241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar};
583241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar
584241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollarstruct rtnl_netem_dist
585241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar{
586241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	int16_t	*	dist_data;
587241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	size_t		dist_size;
588241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar};
589241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar
59044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem
59144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
59244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_latency;
59344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_limit;
59444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_loss;
59544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_gap;
59644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_duplicate;
59744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_jitter;
59844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_mask;
59944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_netem_corr	qnm_corr;
60044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_netem_reo	qnm_ro;
601241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	struct rtnl_netem_crpt	qnm_crpt;
602241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	struct rtnl_netem_dist  qnm_dist;
60344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
60444d362409d5469aed47d19e7908d19bd194493aThomas Graf
60544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_htb_qdisc
60644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
60744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_rate2quantum;
60844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_defcls;
60944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_mask;
61044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
61144d362409d5469aed47d19e7908d19bd194493aThomas Graf
61244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_htb_class
61344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
61444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_prio;
61544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_mtu;
61644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	ch_rate;
61744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	ch_ceil;
61844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_rbuffer;
61944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_cbuffer;
62044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_quantum;
62144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ch_overhead;
62244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ch_mpu;
62344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_mask;
62444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
62544d362409d5469aed47d19e7908d19bd194493aThomas Graf
62644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_cbq
62744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
62844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_lssopt    cbq_lss;
62944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_ratespec      cbq_rate;
63044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_wrropt    cbq_wrr;
63144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_ovl       cbq_ovl;
63244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_fopt      cbq_fopt;
63344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_police    cbq_police;
63444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
63544d362409d5469aed47d19e7908d19bd194493aThomas Graf
63644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_red
63744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
63844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_limit;
63944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_qth_min;
64044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_qth_max;
64144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_flags;
64244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_wlog;
64344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_plog;
64444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_scell_log;
64544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_mask;
64644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
64744d362409d5469aed47d19e7908d19bd194493aThomas Graf
64844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct flnl_request
64944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
65044d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
65144d362409d5469aed47d19e7908d19bd194493aThomas Graf
65244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	lr_addr;
65344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		lr_fwmark;
65444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_tos;
65544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_scope;
65644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_table;
65744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
65844d362409d5469aed47d19e7908d19bd194493aThomas Graf
65944d362409d5469aed47d19e7908d19bd194493aThomas Graf
66044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct flnl_result
66144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
66244d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
66344d362409d5469aed47d19e7908d19bd194493aThomas Graf
66444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct flnl_request *	fr_req;
66544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_table_id;
66644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_prefixlen;
66744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_nh_sel;
66844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_type;
66944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_scope;
67044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		fr_error;
67144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
67244d362409d5469aed47d19e7908d19bd194493aThomas Graf
67344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_POLICY	1
67444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_DOIT	2
67544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_DUMPIT	4
67644d362409d5469aed47d19e7908d19bd194493aThomas Graf
67744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_family_op
67844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
67944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		o_id;
68044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		o_flags;
68144d362409d5469aed47d19e7908d19bd194493aThomas Graf
68244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	o_list;
68344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
68444d362409d5469aed47d19e7908d19bd194493aThomas Graf
68544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_family
68644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
68744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
68844d362409d5469aed47d19e7908d19bd194493aThomas Graf
68944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		gf_id;
69044d362409d5469aed47d19e7908d19bd194493aThomas Graf	char 			gf_name[GENL_NAMSIZ];
69144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_version;
69244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_hdrsize;
69344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_maxattr;
69444d362409d5469aed47d19e7908d19bd194493aThomas Graf
69544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	gf_ops;
69644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
69744d362409d5469aed47d19e7908d19bd194493aThomas Graf
69844d362409d5469aed47d19e7908d19bd194493aThomas Grafunion nfnl_ct_proto
69944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
70044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
70144d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	src;
70244d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	dst;
70344d362409d5469aed47d19e7908d19bd194493aThomas Graf	} port;
70444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
70544d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	id;
70644d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		type;
70744d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		code;
70844d362409d5469aed47d19e7908d19bd194493aThomas Graf	} icmp;
70944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
71044d362409d5469aed47d19e7908d19bd194493aThomas Graf
71144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_ct_dir {
71244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	src;
71344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	dst;
71444d362409d5469aed47d19e7908d19bd194493aThomas Graf	union nfnl_ct_proto	proto;
71544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		packets;
71644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		bytes;
71744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
71844d362409d5469aed47d19e7908d19bd194493aThomas Graf
71944d362409d5469aed47d19e7908d19bd194493aThomas Grafunion nfnl_ct_protoinfo {
72044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
72144d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		state;
72244d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcp;
72344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
72444d362409d5469aed47d19e7908d19bd194493aThomas Graf
72544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_ct {
72644d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
72744d362409d5469aed47d19e7908d19bd194493aThomas Graf
72844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ct_family;
72944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ct_proto;
73044d362409d5469aed47d19e7908d19bd194493aThomas Graf	union nfnl_ct_protoinfo	ct_protoinfo;
73144d362409d5469aed47d19e7908d19bd194493aThomas Graf
73244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_status;
733cbe8902265ccc9f6aa6453aeb3a2a4631ed0eb01Philip Craig	uint32_t		ct_status_mask;
73444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_timeout;
73544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_mark;
73644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_use;
73744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_id;
73844d362409d5469aed47d19e7908d19bd194493aThomas Graf
73944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nfnl_ct_dir	ct_orig;
74044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nfnl_ct_dir	ct_repl;
74144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
74244d362409d5469aed47d19e7908d19bd194493aThomas Graf
74344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_log {
74444d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
74544d362409d5469aed47d19e7908d19bd194493aThomas Graf
7462f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint16_t		log_group;
7472f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_copy_mode;
7482f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_copy_range;
7492f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_flush_timeout;
7502f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_alloc_size;
7512f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_queue_threshold;
7522f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_flags;
7532f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_flag_mask;
7542f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy};
7552f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
7562f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystruct nfnl_log_msg {
7572f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	NLHDR_COMMON
7582f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
7592f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_msg_family;
7602f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_msg_hook;
7612f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint16_t		log_msg_hwproto;
7622f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_mark;
7632f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	struct timeval		log_msg_timestamp;
7642f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_indev;
7652f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_outdev;
7662f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_physindev;
7672f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_physoutdev;
7682f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_msg_hwaddr[8];
7692f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	int			log_msg_hwaddr_len;
7702f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	void *			log_msg_payload;
7712f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	int			log_msg_payload_len;
7722f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	char *			log_msg_prefix;
7732f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_uid;
7742f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_gid;
7752f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_seq;
7762f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_seq_global;
77744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
77844d362409d5469aed47d19e7908d19bd194493aThomas Graf
779e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystruct nfnl_queue {
780e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	NLHDR_COMMON
781e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
782e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_group;
783e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_maxlen;
784e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_copy_range;
785e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_copy_mode;
786e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy};
787e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
788e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystruct nfnl_queue_msg {
789e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	NLHDR_COMMON
790e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
791e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_msg_group;
792e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_family;
793e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_hook;
794e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_msg_hwproto;
795e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_packetid;
796e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_mark;
797e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	struct timeval		queue_msg_timestamp;
798e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_indev;
799e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_outdev;
800e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_physindev;
801e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_physoutdev;
802e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_hwaddr[8];
803e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	int			queue_msg_hwaddr_len;
804e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	void *			queue_msg_payload;
805e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	int			queue_msg_payload_len;
806e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_verdict;
807e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy};
808e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
80944d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
810