netlink-types.h revision e72cb033f2f7323b63f3e640a37e7a75558ab128
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 *
944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Copyright (c) 2003-2006 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
10744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define LOOSE_FLAG_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 Graf#define NEXTHOP_HAS_FLAGS   0x000001
24844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NEXTHOP_HAS_WEIGHT  0x000002
24944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NEXTHOP_HAS_IFINDEX 0x000004
25044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NEXTHOP_HAS_GATEWAY 0x000008
25144d362409d5469aed47d19e7908d19bd194493aThomas Graf
25244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_nexthop
25344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
25444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_flags;
25544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_flag_mask;
25644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_weight;
25744d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* 1 byte spare */
25844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rtnh_ifindex;
25944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rtnh_gateway;
26044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rtnh_mask;
26144d362409d5469aed47d19e7908d19bd194493aThomas Graf
26244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	rtnh_list;
26344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
26444d362409d5469aed47d19e7908d19bd194493aThomas Graf
26544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_route
26644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
26744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
26844d362409d5469aed47d19e7908d19bd194493aThomas Graf
26944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_family;
27044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_dst_len;
27144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_src_len;
27244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_tos;
27344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_table;
27444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_protocol;
27544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_scope;
27644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_type;
27744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_flags;
27844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_dst;
27944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_src;
28044d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			rt_iif[IFNAMSIZ];
28144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_oif;
28244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_gateway;
28344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_prio;
28444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_metrics[RTAX_MAX];
28544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_metrics_mask;
28644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_pref_src;
28744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	rt_nexthops;
28844d362409d5469aed47d19e7908d19bd194493aThomas Graf	realm_t			rt_realms;
28944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_rtcacheinfo	rt_cacheinfo;
29044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_mp_algo;
29144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_flag_mask;
29244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
29344d362409d5469aed47d19e7908d19bd194493aThomas Graf
29444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_rule
29544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
29644d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
29744d362409d5469aed47d19e7908d19bd194493aThomas Graf
29844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t	r_mark;
29944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_prio;
30044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_realms;
30144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_table;
30244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_dsfield;
30344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_type;
30444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_family;
30544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_src_len;
30644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_dst_len;
30744d362409d5469aed47d19e7908d19bd194493aThomas Graf	char		r_iif[IFNAMSIZ];
30844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_src;
30944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_dst;
31044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_srcmap;
31144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
31244d362409d5469aed47d19e7908d19bd194493aThomas Graf
31344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neightbl_parms
31444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
31544d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
31644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Interface index of the device this parameter set is assigned
31744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * to or 0 for the default set.
31844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
31944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_ifindex;
32044d362409d5469aed47d19e7908d19bd194493aThomas Graf
32144d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
32244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Number of references to this parameter set.
32344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
32444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_refcnt;
32544d362409d5469aed47d19e7908d19bd194493aThomas Graf
32644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
32744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Queue length for pending arp requests, i.e. the number of
32844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * packets which are accepted from other layers while the
32944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * neighbour address is still being resolved
33044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
33144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_queue_len;
33244d362409d5469aed47d19e7908d19bd194493aThomas Graf
33344d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
33444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Number of requests to send to the user level ARP daemon.
33544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Specify 0 to disable.
33644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
33744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_app_probes;
33844d362409d5469aed47d19e7908d19bd194493aThomas Graf
33944d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
34044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum number of retries for unicast solicitation.
34144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
34244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_ucast_probes;
34344d362409d5469aed47d19e7908d19bd194493aThomas Graf
34444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
34544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum number of retries for multicast solicitation.
34644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
34744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_mcast_probes;
34844d362409d5469aed47d19e7908d19bd194493aThomas Graf
34944d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
35044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Base value in milliseconds to ompute reachable time, see RFC2461.
35144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
35244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_base_reachable_time;
35344d362409d5469aed47d19e7908d19bd194493aThomas Graf
35444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
35544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Actual reachable time (read-only)
35644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
35744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_reachable_time;	/* secs */
35844d362409d5469aed47d19e7908d19bd194493aThomas Graf
35944d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
36044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * The time in milliseconds between retransmitted Neighbor
36144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Solicitation messages.
36244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
36344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_retrans_time;
36444d362409d5469aed47d19e7908d19bd194493aThomas Graf
36544d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
36644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Interval in milliseconds to check for stale neighbour
36744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * entries.
36844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
36944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_gc_stale_time;	/* secs */
37044d362409d5469aed47d19e7908d19bd194493aThomas Graf
37144d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
37244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Delay in milliseconds for the first time probe if
37344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * the neighbour is reachable.
37444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
37544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_probe_delay;	/* secs */
37644d362409d5469aed47d19e7908d19bd194493aThomas Graf
37744d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
37844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum delay in milliseconds of an answer to a neighbour
37944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * solicitation message.
38044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
38144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_anycast_delay;
38244d362409d5469aed47d19e7908d19bd194493aThomas Graf
38344d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
38444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Minimum age in milliseconds before a neighbour entry
38544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * may be replaced.
38644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
38744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_locktime;
38844d362409d5469aed47d19e7908d19bd194493aThomas Graf
38944d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
39044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Delay in milliseconds before answering to an ARP request
39144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * for which a proxy ARP entry exists.
39244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
39344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_proxy_delay;
39444d362409d5469aed47d19e7908d19bd194493aThomas Graf
39544d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
39644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Queue length for the delayed proxy arp requests.
39744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
39844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_proxy_qlen;
39944d362409d5469aed47d19e7908d19bd194493aThomas Graf
40044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
40144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Mask of available parameter attributes
40244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
40344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_mask;
40444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
40544d362409d5469aed47d19e7908d19bd194493aThomas Graf
40644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NTBLNAMSIZ	32
40744d362409d5469aed47d19e7908d19bd194493aThomas Graf
40844d362409d5469aed47d19e7908d19bd194493aThomas Graf/**
40944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Neighbour table
41044d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup neightbl
41144d362409d5469aed47d19e7908d19bd194493aThomas Graf */
41244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neightbl
41344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
41444d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
41544d362409d5469aed47d19e7908d19bd194493aThomas Graf
41644d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			nt_name[NTBLNAMSIZ];
41744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_family;
41844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh1;
41944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh2;
42044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh3;
42144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		nt_gc_interval;
42244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ndt_config	nt_config;
42344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_neightbl_parms nt_parms;
42444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ndt_stats	nt_stats;
42544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
42644d362409d5469aed47d19e7908d19bd194493aThomas Graf
42744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_ratespec
42844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
42944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rs_cell_log;
43044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_feature;
43144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_addend;
43244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_mpu;
43344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rs_rate;
43444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
43544d362409d5469aed47d19e7908d19bd194493aThomas Graf
43644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tstats
43744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
43844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
43944d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint64_t            bytes;
44044d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint64_t            packets;
44144d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_basic;
44244d362409d5469aed47d19e7908d19bd194493aThomas Graf
44344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
44444d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            bps;
44544d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            pps;
44644d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_rate_est;
44744d362409d5469aed47d19e7908d19bd194493aThomas Graf
44844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
44944d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            qlen;
45044d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            backlog;
45144d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            drops;
45244d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            requeues;
45344d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            overlimits;
45444d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_queue;
45544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
45644d362409d5469aed47d19e7908d19bd194493aThomas Graf
45744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCKINDSIZ	32
45844d362409d5469aed47d19e7908d19bd194493aThomas Graf
45944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_TCA_GENERIC(pre)				\
46044d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON					\
46144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_family;		\
46244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_ifindex;		\
46344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_handle;		\
46444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_parent;		\
46544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_info;		\
46644d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			pre ##_kind[TCKINDSIZ];	\
46744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	pre ##_opts;		\
46844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		pre ##_stats[RTNL_TC_STATS_MAX+1]; \
46944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	pre ##_xstats;		\
47044d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			pre ##_subdata;		\
47144d362409d5469aed47d19e7908d19bd194493aThomas Graf
47244d362409d5469aed47d19e7908d19bd194493aThomas Graf
47344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tca
47444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
47544d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(tc);
47644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
47744d362409d5469aed47d19e7908d19bd194493aThomas Graf
47844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_qdisc
47944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
48044d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(q);
48144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_qdisc_ops	*q_ops;
48244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
48344d362409d5469aed47d19e7908d19bd194493aThomas Graf
48444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_class
48544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
48644d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(c);
48744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_class_ops	*c_ops;
48844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
48944d362409d5469aed47d19e7908d19bd194493aThomas Graf
49044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_cls
49144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
49244d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(c);
49344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	c_prio;
49444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	c_protocol;
49544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_cls_ops	*c_ops;
49644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
49744d362409d5469aed47d19e7908d19bd194493aThomas Graf
49844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_u32
49944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
50044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_divisor;
50144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_hash;
50244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_classid;
50344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_link;
50444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_pcnt;
50544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_selector;
50644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_act;
50744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_police;
50844d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			cu_indev[IFNAMSIZ];
50944d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cu_mask;
51044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
51144d362409d5469aed47d19e7908d19bd194493aThomas Graf
51244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_fw
51344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
51444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cf_classid;
51544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cf_act;
51644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cf_police;
51744d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			cf_indev[IFNAMSIZ];
51844d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cf_mask;
51944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
52044d362409d5469aed47d19e7908d19bd194493aThomas Graf
52144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_dsmark_qdisc
52244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
52344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	qdm_indices;
52444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	qdm_default_index;
52544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qdm_set_tc_index;
52644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qdm_mask;
52744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
52844d362409d5469aed47d19e7908d19bd194493aThomas Graf
52944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_dsmark_class
53044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
53144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		cdm_bmask;
53244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		cdm_value;
53344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	cdm_mask;
53444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
53544d362409d5469aed47d19e7908d19bd194493aThomas Graf
53644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_fifo
53744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
53844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qf_limit;
53944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qf_mask;
54044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
54144d362409d5469aed47d19e7908d19bd194493aThomas Graf
54244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_prio
54344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
54444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qp_bands;
54544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qp_priomap[TC_PRIO_MAX+1];
54644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qp_mask;
54744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
54844d362409d5469aed47d19e7908d19bd194493aThomas Graf
54944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tbf
55044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
55144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_limit;
55244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_mpu;
55344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	qt_rate;
55444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_rate_bucket;
55544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_rate_txtime;
55644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	qt_peakrate;
55744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_peakrate_bucket;
55844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_peakrate_txtime;
55944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_mask;
56044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
56144d362409d5469aed47d19e7908d19bd194493aThomas Graf
56244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_sfq
56344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
56444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_quantum;
56544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_perturb;
56644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_limit;
56744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_divisor;
56844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_flows;
56944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_mask;
57044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
57144d362409d5469aed47d19e7908d19bd194493aThomas Graf
57244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem_corr
57344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
57444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_delay;
57544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_loss;
57644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_duplicate;
57744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
57844d362409d5469aed47d19e7908d19bd194493aThomas Graf
57944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem_reo
58044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
58144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmro_probability;
58244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmro_correlation;
58344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
58444d362409d5469aed47d19e7908d19bd194493aThomas Graf
58544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem
58644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
58744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_latency;
58844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_limit;
58944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_loss;
59044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_gap;
59144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_duplicate;
59244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_jitter;
59344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_mask;
59444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_netem_corr	qnm_corr;
59544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_netem_reo	qnm_ro;
59644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
59744d362409d5469aed47d19e7908d19bd194493aThomas Graf
59844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_htb_qdisc
59944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
60044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_rate2quantum;
60144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_defcls;
60244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_mask;
60344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
60444d362409d5469aed47d19e7908d19bd194493aThomas Graf
60544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_htb_class
60644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
60744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_prio;
60844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_mtu;
60944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	ch_rate;
61044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	ch_ceil;
61144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_rbuffer;
61244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_cbuffer;
61344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_quantum;
61444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ch_overhead;
61544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ch_mpu;
61644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_mask;
61744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
61844d362409d5469aed47d19e7908d19bd194493aThomas Graf
61944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_cbq
62044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
62144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_lssopt    cbq_lss;
62244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_ratespec      cbq_rate;
62344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_wrropt    cbq_wrr;
62444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_ovl       cbq_ovl;
62544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_fopt      cbq_fopt;
62644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_police    cbq_police;
62744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
62844d362409d5469aed47d19e7908d19bd194493aThomas Graf
62944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_red
63044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
63144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_limit;
63244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_qth_min;
63344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_qth_max;
63444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_flags;
63544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_wlog;
63644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_plog;
63744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_scell_log;
63844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_mask;
63944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
64044d362409d5469aed47d19e7908d19bd194493aThomas Graf
64144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct flnl_request
64244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
64344d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
64444d362409d5469aed47d19e7908d19bd194493aThomas Graf
64544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	lr_addr;
64644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		lr_fwmark;
64744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_tos;
64844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_scope;
64944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_table;
65044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
65144d362409d5469aed47d19e7908d19bd194493aThomas Graf
65244d362409d5469aed47d19e7908d19bd194493aThomas Graf
65344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct flnl_result
65444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
65544d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
65644d362409d5469aed47d19e7908d19bd194493aThomas Graf
65744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct flnl_request *	fr_req;
65844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_table_id;
65944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_prefixlen;
66044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_nh_sel;
66144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_type;
66244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_scope;
66344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		fr_error;
66444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
66544d362409d5469aed47d19e7908d19bd194493aThomas Graf
66644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_POLICY	1
66744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_DOIT	2
66844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_DUMPIT	4
66944d362409d5469aed47d19e7908d19bd194493aThomas Graf
67044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_family_op
67144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
67244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		o_id;
67344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		o_flags;
67444d362409d5469aed47d19e7908d19bd194493aThomas Graf
67544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	o_list;
67644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
67744d362409d5469aed47d19e7908d19bd194493aThomas Graf
67844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_family
67944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
68044d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
68144d362409d5469aed47d19e7908d19bd194493aThomas Graf
68244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		gf_id;
68344d362409d5469aed47d19e7908d19bd194493aThomas Graf	char 			gf_name[GENL_NAMSIZ];
68444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_version;
68544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_hdrsize;
68644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_maxattr;
68744d362409d5469aed47d19e7908d19bd194493aThomas Graf
68844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	gf_ops;
68944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
69044d362409d5469aed47d19e7908d19bd194493aThomas Graf
69144d362409d5469aed47d19e7908d19bd194493aThomas Grafunion nfnl_ct_proto
69244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
69344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
69444d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	src;
69544d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	dst;
69644d362409d5469aed47d19e7908d19bd194493aThomas Graf	} port;
69744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
69844d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	id;
69944d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		type;
70044d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		code;
70144d362409d5469aed47d19e7908d19bd194493aThomas Graf	} icmp;
70244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
70344d362409d5469aed47d19e7908d19bd194493aThomas Graf
70444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_ct_dir {
70544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	src;
70644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	dst;
70744d362409d5469aed47d19e7908d19bd194493aThomas Graf	union nfnl_ct_proto	proto;
70844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		packets;
70944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		bytes;
71044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
71144d362409d5469aed47d19e7908d19bd194493aThomas Graf
71244d362409d5469aed47d19e7908d19bd194493aThomas Grafunion nfnl_ct_protoinfo {
71344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
71444d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		state;
71544d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcp;
71644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
71744d362409d5469aed47d19e7908d19bd194493aThomas Graf
71844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_ct {
71944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
72044d362409d5469aed47d19e7908d19bd194493aThomas Graf
72144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ct_family;
72244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ct_proto;
72344d362409d5469aed47d19e7908d19bd194493aThomas Graf	union nfnl_ct_protoinfo	ct_protoinfo;
72444d362409d5469aed47d19e7908d19bd194493aThomas Graf
72544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_status;
726cbe8902265ccc9f6aa6453aeb3a2a4631ed0eb01Philip Craig	uint32_t		ct_status_mask;
72744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_timeout;
72844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_mark;
72944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_use;
73044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_id;
73144d362409d5469aed47d19e7908d19bd194493aThomas Graf
73244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nfnl_ct_dir	ct_orig;
73344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nfnl_ct_dir	ct_repl;
73444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
73544d362409d5469aed47d19e7908d19bd194493aThomas Graf
73644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_log {
73744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
73844d362409d5469aed47d19e7908d19bd194493aThomas Graf
73944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			log_family;
74044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			log_hook;
74144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		log_hwproto;
74244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		log_mark;
74344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct timeval		log_timestamp;
74444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		log_indev;
74544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		log_outdev;
74644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		log_physindev;
74744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		log_physoutdev;
74844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			log_hwaddr[8];
74944d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			log_hwaddr_len;
75044d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			log_payload;
75144d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			log_payload_len;
75244d362409d5469aed47d19e7908d19bd194493aThomas Graf	char *			log_prefix;
75344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		log_uid;
75444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		log_seq;
75544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		log_seq_global;
75644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
75744d362409d5469aed47d19e7908d19bd194493aThomas Graf
758e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystruct nfnl_queue {
759e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	NLHDR_COMMON
760e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
761e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_group;
762e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_maxlen;
763e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_copy_range;
764e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_copy_mode;
765e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy};
766e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
767e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystruct nfnl_queue_msg {
768e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	NLHDR_COMMON
769e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
770e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_msg_group;
771e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_family;
772e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_hook;
773e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_msg_hwproto;
774e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_packetid;
775e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_mark;
776e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	struct timeval		queue_msg_timestamp;
777e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_indev;
778e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_outdev;
779e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_physindev;
780e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_physoutdev;
781e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_hwaddr[8];
782e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	int			queue_msg_hwaddr_len;
783e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	void *			queue_msg_payload;
784e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	int			queue_msg_payload_len;
785e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_verdict;
786e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy};
787e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
78844d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
789