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)
252bdee95a765457fe4206b89d51974ae56e75c588Thomas Graf#define NL_NO_AUTO_ACK		(1<<4)
2644d362409d5469aed47d19e7908d19bd194493aThomas Graf
2744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_MSG_CRED_PRESENT 1
2844d362409d5469aed47d19e7908d19bd194493aThomas Graf
2944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache_ops;
301155370f520cb64657e25153255cf7dc1424317fThomas Grafstruct nl_sock;
3144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_object;
3244d362409d5469aed47d19e7908d19bd194493aThomas Graf
3344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cb
3444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
3544d362409d5469aed47d19e7908d19bd194493aThomas Graf	nl_recvmsg_msg_cb_t	cb_set[NL_CB_TYPE_MAX+1];
3644d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			cb_args[NL_CB_TYPE_MAX+1];
3744d362409d5469aed47d19e7908d19bd194493aThomas Graf
3844d362409d5469aed47d19e7908d19bd194493aThomas Graf	nl_recvmsg_err_cb_t	cb_err;
3944d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			cb_err_arg;
4044d362409d5469aed47d19e7908d19bd194493aThomas Graf
4144d362409d5469aed47d19e7908d19bd194493aThomas Graf	/** May be used to replace nl_recvmsgs with your own implementation
4244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * in all internal calls to nl_recvmsgs. */
431155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			(*cb_recvmsgs_ow)(struct nl_sock *,
4444d362409d5469aed47d19e7908d19bd194493aThomas Graf						  struct nl_cb *);
4544d362409d5469aed47d19e7908d19bd194493aThomas Graf
4644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/** Overwrite internal calls to nl_recv, must return the number of
4744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * octets read and allocate a buffer for the received data. */
481155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			(*cb_recv_ow)(struct nl_sock *,
4944d362409d5469aed47d19e7908d19bd194493aThomas Graf					      struct sockaddr_nl *,
5044d362409d5469aed47d19e7908d19bd194493aThomas Graf					      unsigned char **,
5144d362409d5469aed47d19e7908d19bd194493aThomas Graf					      struct ucred **);
5244d362409d5469aed47d19e7908d19bd194493aThomas Graf
5344d362409d5469aed47d19e7908d19bd194493aThomas Graf	/** Overwrites internal calls to nl_send, must send the netlink
5444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * message. */
551155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			(*cb_send_ow)(struct nl_sock *,
5644d362409d5469aed47d19e7908d19bd194493aThomas Graf					      struct nl_msg *);
5744d362409d5469aed47d19e7908d19bd194493aThomas Graf
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cb_refcnt;
5944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
6044d362409d5469aed47d19e7908d19bd194493aThomas Graf
611155370f520cb64657e25153255cf7dc1424317fThomas Grafstruct nl_sock
6244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
631155370f520cb64657e25153255cf7dc1424317fThomas Graf	struct sockaddr_nl	s_local;
641155370f520cb64657e25153255cf7dc1424317fThomas Graf	struct sockaddr_nl	s_peer;
651155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			s_fd;
661155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			s_proto;
671155370f520cb64657e25153255cf7dc1424317fThomas Graf	unsigned int		s_seq_next;
681155370f520cb64657e25153255cf7dc1424317fThomas Graf	unsigned int		s_seq_expect;
691155370f520cb64657e25153255cf7dc1424317fThomas Graf	int			s_flags;
701155370f520cb64657e25153255cf7dc1424317fThomas Graf	struct nl_cb *		s_cb;
7144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
7244d362409d5469aed47d19e7908d19bd194493aThomas Graf
7344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache
7444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
7544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	c_items;
7644d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			c_nitems;
7744d362409d5469aed47d19e7908d19bd194493aThomas Graf	int                     c_iarg1;
7844d362409d5469aed47d19e7908d19bd194493aThomas Graf	int                     c_iarg2;
7944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_cache_ops *   c_ops;
8044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
8144d362409d5469aed47d19e7908d19bd194493aThomas Graf
8244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache_assoc
8344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
8444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_cache *	ca_cache;
8544d362409d5469aed47d19e7908d19bd194493aThomas Graf	change_func_t		ca_change;
864ab22ccd47319e7d9a972bcf018e1a03870f64f0Andreas Fett	void *			ca_change_data;
8744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
8844d362409d5469aed47d19e7908d19bd194493aThomas Graf
8944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache_mngr
9044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
9144d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cm_protocol;
9244d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cm_flags;
9344d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cm_nassocs;
941155370f520cb64657e25153255cf7dc1424317fThomas Graf	struct nl_sock *	cm_handle;
9544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_cache_assoc *	cm_assocs;
9644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
9744d362409d5469aed47d19e7908d19bd194493aThomas Graf
9844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_parser_param;
9944d362409d5469aed47d19e7908d19bd194493aThomas Graf
100535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf#define LOOSE_COMPARISON	1
10144d362409d5469aed47d19e7908d19bd194493aThomas Graf
10244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_OBJ_MARK		1
10344d362409d5469aed47d19e7908d19bd194493aThomas Graf
10444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_object
10544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
10644d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
10744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
10844d362409d5469aed47d19e7908d19bd194493aThomas Graf
10944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_data
11044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
11144d362409d5469aed47d19e7908d19bd194493aThomas Graf	size_t			d_size;
11244d362409d5469aed47d19e7908d19bd194493aThomas Graf	void *			d_data;
11344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
11444d362409d5469aed47d19e7908d19bd194493aThomas Graf
11544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_addr
11644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
11744d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			a_family;
11844d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned int		a_maxsize;
11944d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned int		a_len;
12044d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			a_prefixlen;
12144d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			a_refcnt;
12244d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			a_addr[0];
12344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
12444d362409d5469aed47d19e7908d19bd194493aThomas Graf
12544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_msg
12644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
12744d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			nm_protocol;
12844d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			nm_flags;
12944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct sockaddr_nl	nm_src;
13044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct sockaddr_nl	nm_dst;
13144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ucred		nm_creds;
13244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nlmsghdr *	nm_nlh;
1336de17f3308cfd53ad922d144a1b28ddd962d6678Thomas Graf	size_t			nm_size;
13423ee46ef7115c2e311c36e43a833e6c3deada18aThomas Graf	int			nm_refcnt;
13544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
13644d362409d5469aed47d19e7908d19bd194493aThomas Graf
13744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_link_map
13844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
13944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t lm_mem_start;
14044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t lm_mem_end;
14144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t lm_base_addr;
14244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t lm_irq;
14344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t  lm_dma;
14444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t  lm_port;
14544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
14644d362409d5469aed47d19e7908d19bd194493aThomas Graf
14744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFQDISCSIZ	32
14844d362409d5469aed47d19e7908d19bd194493aThomas Graf
14944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_link
15044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
15144d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
15244d362409d5469aed47d19e7908d19bd194493aThomas Graf
15344d362409d5469aed47d19e7908d19bd194493aThomas Graf	char		l_name[IFNAMSIZ];
15444d362409d5469aed47d19e7908d19bd194493aThomas Graf
15544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_family;
15644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_arptype;
15744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_index;
15844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_flags;
15944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_change;
16044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t 	l_mtu;
16144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_link;
16244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_txqlen;
16344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_weight;
16444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_master;
16544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *l_addr;
16644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *l_bcast;
16744d362409d5469aed47d19e7908d19bd194493aThomas Graf	char		l_qdisc[IFQDISCSIZ];
16844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_link_map l_map;
16944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t	l_stats[RTNL_LINK_STATS_MAX+1];
17044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	l_flag_mask;
1713ad4665be2f192291238cbe78118a57ec42436c6Thomas Graf	uint8_t		l_operstate;
1723ad4665be2f192291238cbe78118a57ec42436c6Thomas Graf	uint8_t		l_linkmode;
173a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	/* 2 byte hole */
174a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	struct rtnl_link_info_ops *l_info_ops;
175a7469ce758fac3631df6ce72eb3f89150070e7f8Thomas Graf	void *		l_info;
17644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
17744d362409d5469aed47d19e7908d19bd194493aThomas Graf
17844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_ncacheinfo
17944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
18044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_confirmed;	/**< Time since neighbour validty was last confirmed */
18144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_used;	/**< Time since neighbour entry was last ued */
18244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_updated;	/**< Time since last update */
18344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t nci_refcnt;	/**< Reference counter */
18444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
18544d362409d5469aed47d19e7908d19bd194493aThomas Graf
18644d362409d5469aed47d19e7908d19bd194493aThomas Graf
18744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neigh
18844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
18944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
19044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	n_family;
19144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	n_ifindex;
19244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	n_state;
19344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		n_flags;
19444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		n_type;
19544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *n_lladdr;
19644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *n_dst;
19744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	n_probes;
19844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ncacheinfo n_cacheinfo;
19944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t                n_state_mask;
20044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t                n_flag_mask;
20144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
20244d362409d5469aed47d19e7908d19bd194493aThomas Graf
20344d362409d5469aed47d19e7908d19bd194493aThomas Graf
20444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_addr_cacheinfo
20544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
20644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Preferred lifetime in seconds */
20744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_prefered;
20844d362409d5469aed47d19e7908d19bd194493aThomas Graf
20944d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Valid lifetime in seconds */
21044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_valid;
21144d362409d5469aed47d19e7908d19bd194493aThomas Graf
21244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Timestamp of creation in 1/100s seince boottime */
21344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_cstamp;
21444d362409d5469aed47d19e7908d19bd194493aThomas Graf
21544d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* Timestamp of last update in 1/100s since boottime */
21644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t aci_tstamp;
21744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
21844d362409d5469aed47d19e7908d19bd194493aThomas Graf
21944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_addr
22044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
22144d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
22244d362409d5469aed47d19e7908d19bd194493aThomas Graf
22344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_family;
22444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_prefixlen;
22544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_flags;
22644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		a_scope;
22744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	a_ifindex;
22844d362409d5469aed47d19e7908d19bd194493aThomas Graf
22944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_peer;
23044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_local;
23144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_bcast;
23244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_anycast;
23344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *a_multicast;
23444d362409d5469aed47d19e7908d19bd194493aThomas Graf
23544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_addr_cacheinfo a_cacheinfo;
23644d362409d5469aed47d19e7908d19bd194493aThomas Graf
23744d362409d5469aed47d19e7908d19bd194493aThomas Graf	char a_label[IFNAMSIZ];
23844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t a_flag_mask;
23944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
24044d362409d5469aed47d19e7908d19bd194493aThomas Graf
24144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_nexthop
24244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
24344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_flags;
24444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_flag_mask;
24544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rtnh_weight;
24644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* 1 byte spare */
24744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rtnh_ifindex;
24844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rtnh_gateway;
249535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		ce_mask; /* HACK to support attr macros */
25044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	rtnh_list;
251535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rtnh_realms;
25244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
25344d362409d5469aed47d19e7908d19bd194493aThomas Graf
25444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_route
25544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
25644d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
25744d362409d5469aed47d19e7908d19bd194493aThomas Graf
25844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_family;
25944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_dst_len;
26044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_src_len;
26144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_tos;
26244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_protocol;
26344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_scope;
26444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rt_type;
265535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint8_t			rt_nmetrics;
26644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_flags;
26744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_dst;
26844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_src;
269535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rt_table;
270535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rt_iif;
27144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_prio;
27244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_metrics[RTAX_MAX];
27344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_metrics_mask;
274535e83162249ed6274ba46bc72d8cc683ba20e17Thomas Graf	uint32_t		rt_nr_nh;
27544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	rt_pref_src;
27644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	rt_nexthops;
27744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_rtcacheinfo	rt_cacheinfo;
27844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rt_flag_mask;
27944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
28044d362409d5469aed47d19e7908d19bd194493aThomas Graf
28144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_rule
28244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
28344d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
28444d362409d5469aed47d19e7908d19bd194493aThomas Graf
28544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t	r_mark;
28644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_prio;
28744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_realms;
28844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	r_table;
28944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_dsfield;
29044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_type;
29144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_family;
29244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_src_len;
29344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		r_dst_len;
29444d362409d5469aed47d19e7908d19bd194493aThomas Graf	char		r_iif[IFNAMSIZ];
29544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_src;
29644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_dst;
29744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *r_srcmap;
29844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
29944d362409d5469aed47d19e7908d19bd194493aThomas Graf
30044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neightbl_parms
30144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
30244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
30344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Interface index of the device this parameter set is assigned
30444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * to or 0 for the default set.
30544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
30644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_ifindex;
30744d362409d5469aed47d19e7908d19bd194493aThomas Graf
30844d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
30944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Number of references to this parameter set.
31044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
31144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_refcnt;
31244d362409d5469aed47d19e7908d19bd194493aThomas Graf
31344d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
31444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Queue length for pending arp requests, i.e. the number of
31544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * packets which are accepted from other layers while the
31644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * neighbour address is still being resolved
31744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
31844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_queue_len;
31944d362409d5469aed47d19e7908d19bd194493aThomas Graf
32044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
32144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Number of requests to send to the user level ARP daemon.
32244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Specify 0 to disable.
32344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
32444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_app_probes;
32544d362409d5469aed47d19e7908d19bd194493aThomas Graf
32644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
32744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum number of retries for unicast solicitation.
32844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
32944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_ucast_probes;
33044d362409d5469aed47d19e7908d19bd194493aThomas Graf
33144d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
33244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum number of retries for multicast solicitation.
33344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
33444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_mcast_probes;
33544d362409d5469aed47d19e7908d19bd194493aThomas Graf
33644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
33744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Base value in milliseconds to ompute reachable time, see RFC2461.
33844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
33944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_base_reachable_time;
34044d362409d5469aed47d19e7908d19bd194493aThomas Graf
34144d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
34244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Actual reachable time (read-only)
34344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
34444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_reachable_time;	/* secs */
34544d362409d5469aed47d19e7908d19bd194493aThomas Graf
34644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
34744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * The time in milliseconds between retransmitted Neighbor
34844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Solicitation messages.
34944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
35044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_retrans_time;
35144d362409d5469aed47d19e7908d19bd194493aThomas Graf
35244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
35344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Interval in milliseconds to check for stale neighbour
35444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * entries.
35544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
35644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_gc_stale_time;	/* secs */
35744d362409d5469aed47d19e7908d19bd194493aThomas Graf
35844d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
35944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Delay in milliseconds for the first time probe if
36044d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * the neighbour is reachable.
36144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
36244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_probe_delay;	/* secs */
36344d362409d5469aed47d19e7908d19bd194493aThomas Graf
36444d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
36544d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Maximum delay in milliseconds of an answer to a neighbour
36644d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * solicitation message.
36744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
36844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_anycast_delay;
36944d362409d5469aed47d19e7908d19bd194493aThomas Graf
37044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
37144d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Minimum age in milliseconds before a neighbour entry
37244d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * may be replaced.
37344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
37444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_locktime;
37544d362409d5469aed47d19e7908d19bd194493aThomas Graf
37644d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
37744d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Delay in milliseconds before answering to an ARP request
37844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * for which a proxy ARP entry exists.
37944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
38044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		ntp_proxy_delay;
38144d362409d5469aed47d19e7908d19bd194493aThomas Graf
38244d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
38344d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Queue length for the delayed proxy arp requests.
38444d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
38544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_proxy_qlen;
38644d362409d5469aed47d19e7908d19bd194493aThomas Graf
38744d362409d5469aed47d19e7908d19bd194493aThomas Graf	/**
38844d362409d5469aed47d19e7908d19bd194493aThomas Graf	 * Mask of available parameter attributes
38944d362409d5469aed47d19e7908d19bd194493aThomas Graf	 */
39044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ntp_mask;
39144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
39244d362409d5469aed47d19e7908d19bd194493aThomas Graf
39344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NTBLNAMSIZ	32
39444d362409d5469aed47d19e7908d19bd194493aThomas Graf
39544d362409d5469aed47d19e7908d19bd194493aThomas Graf/**
39644d362409d5469aed47d19e7908d19bd194493aThomas Graf * Neighbour table
39744d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup neightbl
39844d362409d5469aed47d19e7908d19bd194493aThomas Graf */
39944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neightbl
40044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
40144d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
40244d362409d5469aed47d19e7908d19bd194493aThomas Graf
40344d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			nt_name[NTBLNAMSIZ];
40444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_family;
40544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh1;
40644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh2;
40744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		nt_gc_thresh3;
40844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		nt_gc_interval;
40944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ndt_config	nt_config;
41044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_neightbl_parms nt_parms;
41144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct ndt_stats	nt_stats;
41244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
41344d362409d5469aed47d19e7908d19bd194493aThomas Graf
41444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_ratespec
41544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
41644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			rs_cell_log;
41744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_feature;
41844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_addend;
41944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		rs_mpu;
42044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		rs_rate;
42144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
42244d362409d5469aed47d19e7908d19bd194493aThomas Graf
42344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tstats
42444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
42544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
42644d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint64_t            bytes;
42744d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint64_t            packets;
42844d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_basic;
42944d362409d5469aed47d19e7908d19bd194493aThomas Graf
43044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
43144d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            bps;
43244d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            pps;
43344d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_rate_est;
43444d362409d5469aed47d19e7908d19bd194493aThomas Graf
43544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
43644d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            qlen;
43744d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            backlog;
43844d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            drops;
43944d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            requeues;
44044d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint32_t            overlimits;
44144d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcs_queue;
44244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
44344d362409d5469aed47d19e7908d19bd194493aThomas Graf
44444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCKINDSIZ	32
44544d362409d5469aed47d19e7908d19bd194493aThomas Graf
44644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_TCA_GENERIC(pre)				\
44744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON					\
44844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_family;		\
44944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_ifindex;		\
45044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_handle;		\
45144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_parent;		\
45244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		pre ##_info;		\
45344d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			pre ##_kind[TCKINDSIZ];	\
45444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	pre ##_opts;		\
45544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		pre ##_stats[RTNL_TC_STATS_MAX+1]; \
45644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	pre ##_xstats;		\
457ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	struct nl_data *	pre ##_subdata;		\
45844d362409d5469aed47d19e7908d19bd194493aThomas Graf
45944d362409d5469aed47d19e7908d19bd194493aThomas Graf
46044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tca
46144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
46244d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(tc);
46344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
46444d362409d5469aed47d19e7908d19bd194493aThomas Graf
46544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_qdisc
46644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
46744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(q);
46844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_qdisc_ops	*q_ops;
46944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
47044d362409d5469aed47d19e7908d19bd194493aThomas Graf
47144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_class
47244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
47344d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(c);
47444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_class_ops	*c_ops;
47544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
47644d362409d5469aed47d19e7908d19bd194493aThomas Graf
47744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_cls
47844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
47944d362409d5469aed47d19e7908d19bd194493aThomas Graf	NL_TCA_GENERIC(c);
480ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	uint16_t		c_prio;
481ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	uint16_t		c_protocol;
48244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_cls_ops	*c_ops;
48344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
48444d362409d5469aed47d19e7908d19bd194493aThomas Graf
48544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_u32
48644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
48744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_divisor;
48844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_hash;
48944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_classid;
49044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		cu_link;
49144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_pcnt;
49244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_selector;
49344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_act;
49444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_data *	cu_police;
49544d362409d5469aed47d19e7908d19bd194493aThomas Graf	char			cu_indev[IFNAMSIZ];
49644d362409d5469aed47d19e7908d19bd194493aThomas Graf	int			cu_mask;
49744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
49844d362409d5469aed47d19e7908d19bd194493aThomas Graf
499ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Grafstruct rtnl_cgroup
500ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf{
501ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	struct rtnl_ematch_tree *cg_ematch;
502ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	int			cg_mask;
503ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf};
504ef858fb492dfe98e3ae194264fbc73649cf8493aThomas 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
514ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Grafstruct rtnl_ematch
515ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf{
516ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	uint16_t		e_id;
517ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	uint16_t		e_kind;
518ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	uint16_t		e_flags;
519ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf
520ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	struct nl_list_head	e_childs;
521ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	struct nl_list_head	e_list;
522ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	struct rtnl_ematch_ops *e_ops;
523ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf
524ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	char			e_data[0];
525ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf};
526ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf
527ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Grafstruct rtnl_ematch_tree
528ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf{
529ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	uint16_t		et_progid;
530ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf	struct nl_list_head	et_list;
531ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf
532ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf};
533ef858fb492dfe98e3ae194264fbc73649cf8493aThomas Graf
53444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_dsmark_qdisc
53544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
53644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	qdm_indices;
53744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t	qdm_default_index;
53844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qdm_set_tc_index;
53944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qdm_mask;
54044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
54144d362409d5469aed47d19e7908d19bd194493aThomas Graf
54244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_dsmark_class
54344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
54444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		cdm_bmask;
54544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		cdm_value;
54644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	cdm_mask;
54744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
54844d362409d5469aed47d19e7908d19bd194493aThomas Graf
54944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_fifo
55044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
55144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qf_limit;
55244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qf_mask;
55344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
55444d362409d5469aed47d19e7908d19bd194493aThomas Graf
55544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_prio
55644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
55744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qp_bands;
55844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qp_priomap[TC_PRIO_MAX+1];
55944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qp_mask;
56044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
56144d362409d5469aed47d19e7908d19bd194493aThomas Graf
56244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tbf
56344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
56444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_limit;
56544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_mpu;
56644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	qt_rate;
56744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_rate_bucket;
56844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_rate_txtime;
56944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	qt_peakrate;
57044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_peakrate_bucket;
57144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_peakrate_txtime;
57244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qt_mask;
57344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
57444d362409d5469aed47d19e7908d19bd194493aThomas Graf
57544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_sfq
57644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
57744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_quantum;
57844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_perturb;
57944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_limit;
58044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_divisor;
58144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_flows;
58244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qs_mask;
58344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
58444d362409d5469aed47d19e7908d19bd194493aThomas Graf
58544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem_corr
58644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
58744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_delay;
58844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_loss;
58944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmc_duplicate;
59044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
59144d362409d5469aed47d19e7908d19bd194493aThomas Graf
59244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem_reo
59344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
59444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmro_probability;
59544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	nmro_correlation;
59644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
59744d362409d5469aed47d19e7908d19bd194493aThomas Graf
598241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollarstruct rtnl_netem_crpt
599241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar{
600241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	uint32_t	nmcr_probability;
601241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	uint32_t	nmcr_correlation;
602241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar};
603241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar
604241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollarstruct rtnl_netem_dist
605241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar{
606241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	int16_t	*	dist_data;
607241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	size_t		dist_size;
608241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar};
609241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar
61044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem
61144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
61244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_latency;
61344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_limit;
61444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_loss;
61544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_gap;
61644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_duplicate;
61744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_jitter;
61844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qnm_mask;
61944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_netem_corr	qnm_corr;
62044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_netem_reo	qnm_ro;
621241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	struct rtnl_netem_crpt	qnm_crpt;
622241b2b83ba5672f5c86154d29eeb8ef4c7c6e9b4Tad Kollar	struct rtnl_netem_dist  qnm_dist;
62344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
62444d362409d5469aed47d19e7908d19bd194493aThomas Graf
62544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_htb_qdisc
62644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
62744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_rate2quantum;
62844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_defcls;
62944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		qh_mask;
63044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
63144d362409d5469aed47d19e7908d19bd194493aThomas Graf
63244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_htb_class
63344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
63444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_prio;
63544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_mtu;
63644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	ch_rate;
63744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct rtnl_ratespec	ch_ceil;
63844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_rbuffer;
63944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_cbuffer;
64044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_quantum;
64144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ch_overhead;
64244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ch_mpu;
64344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ch_mask;
64444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
64544d362409d5469aed47d19e7908d19bd194493aThomas Graf
64644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_cbq
64744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
64844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_lssopt    cbq_lss;
64944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_ratespec      cbq_rate;
65044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_wrropt    cbq_wrr;
65144d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_ovl       cbq_ovl;
65244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_fopt      cbq_fopt;
65344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_cbq_police    cbq_police;
65444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
65544d362409d5469aed47d19e7908d19bd194493aThomas Graf
65644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_red
65744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
65844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_limit;
65944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_qth_min;
66044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_qth_max;
66144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_flags;
66244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_wlog;
66344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_plog;
66444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t		qr_scell_log;
66544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t	qr_mask;
66644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
66744d362409d5469aed47d19e7908d19bd194493aThomas Graf
66844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct flnl_request
66944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
67044d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
67144d362409d5469aed47d19e7908d19bd194493aThomas Graf
67244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	lr_addr;
67344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		lr_fwmark;
67444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_tos;
67544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_scope;
67644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			lr_table;
67744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
67844d362409d5469aed47d19e7908d19bd194493aThomas Graf
67944d362409d5469aed47d19e7908d19bd194493aThomas Graf
68044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct flnl_result
68144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
68244d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
68344d362409d5469aed47d19e7908d19bd194493aThomas Graf
68444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct flnl_request *	fr_req;
68544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_table_id;
68644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_prefixlen;
68744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_nh_sel;
68844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_type;
68944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			fr_scope;
69044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		fr_error;
69144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
69244d362409d5469aed47d19e7908d19bd194493aThomas Graf
69344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_POLICY	1
69444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_DOIT	2
69544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_DUMPIT	4
69644d362409d5469aed47d19e7908d19bd194493aThomas Graf
69744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_family_op
69844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
69944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		o_id;
70044d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		o_flags;
70144d362409d5469aed47d19e7908d19bd194493aThomas Graf
70244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	o_list;
70344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
70444d362409d5469aed47d19e7908d19bd194493aThomas Graf
70544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_family
70644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
70744d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
70844d362409d5469aed47d19e7908d19bd194493aThomas Graf
70944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint16_t		gf_id;
71044d362409d5469aed47d19e7908d19bd194493aThomas Graf	char 			gf_name[GENL_NAMSIZ];
71144d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_version;
71244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_hdrsize;
71344d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		gf_maxattr;
71444d362409d5469aed47d19e7908d19bd194493aThomas Graf
71544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_list_head	gf_ops;
71644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
71744d362409d5469aed47d19e7908d19bd194493aThomas Graf
71844d362409d5469aed47d19e7908d19bd194493aThomas Grafunion nfnl_ct_proto
71944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
72044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
72144d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	src;
72244d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	dst;
72344d362409d5469aed47d19e7908d19bd194493aThomas Graf	} port;
72444d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
72544d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint16_t	id;
72644d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		type;
72744d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		code;
72844d362409d5469aed47d19e7908d19bd194493aThomas Graf	} icmp;
72944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
73044d362409d5469aed47d19e7908d19bd194493aThomas Graf
73144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_ct_dir {
73244d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	src;
73344d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nl_addr *	dst;
73444d362409d5469aed47d19e7908d19bd194493aThomas Graf	union nfnl_ct_proto	proto;
73544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		packets;
73644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint64_t		bytes;
73744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
73844d362409d5469aed47d19e7908d19bd194493aThomas Graf
73944d362409d5469aed47d19e7908d19bd194493aThomas Grafunion nfnl_ct_protoinfo {
74044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct {
74144d362409d5469aed47d19e7908d19bd194493aThomas Graf		uint8_t		state;
74244d362409d5469aed47d19e7908d19bd194493aThomas Graf	} tcp;
74344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
74444d362409d5469aed47d19e7908d19bd194493aThomas Graf
74544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_ct {
74644d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
74744d362409d5469aed47d19e7908d19bd194493aThomas Graf
74844d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ct_family;
74944d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint8_t			ct_proto;
75044d362409d5469aed47d19e7908d19bd194493aThomas Graf	union nfnl_ct_protoinfo	ct_protoinfo;
75144d362409d5469aed47d19e7908d19bd194493aThomas Graf
75244d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_status;
753cbe8902265ccc9f6aa6453aeb3a2a4631ed0eb01Philip Craig	uint32_t		ct_status_mask;
75444d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_timeout;
75544d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_mark;
75644d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_use;
75744d362409d5469aed47d19e7908d19bd194493aThomas Graf	uint32_t		ct_id;
75844d362409d5469aed47d19e7908d19bd194493aThomas Graf
75944d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nfnl_ct_dir	ct_orig;
76044d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct nfnl_ct_dir	ct_repl;
76144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
76244d362409d5469aed47d19e7908d19bd194493aThomas Graf
76344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_log {
76444d362409d5469aed47d19e7908d19bd194493aThomas Graf	NLHDR_COMMON
76544d362409d5469aed47d19e7908d19bd194493aThomas Graf
7662f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint16_t		log_group;
7672f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_copy_mode;
7682f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_copy_range;
7692f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_flush_timeout;
7702f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_alloc_size;
7712f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_queue_threshold;
7722f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_flags;
7732f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_flag_mask;
7742f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy};
7752f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
7762f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardystruct nfnl_log_msg {
7772f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	NLHDR_COMMON
7782f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy
7792f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_msg_family;
7802f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_msg_hook;
7812f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint16_t		log_msg_hwproto;
7822f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_mark;
7832f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	struct timeval		log_msg_timestamp;
7842f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_indev;
7852f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_outdev;
7862f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_physindev;
7872f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_physoutdev;
7882f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint8_t			log_msg_hwaddr[8];
7892f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	int			log_msg_hwaddr_len;
7902f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	void *			log_msg_payload;
7912f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	int			log_msg_payload_len;
7922f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	char *			log_msg_prefix;
7932f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_uid;
7942f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_gid;
7952f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_seq;
7962f4f8a5094b56c460f4b5bb1b62b7ec8f624942cPatrick McHardy	uint32_t		log_msg_seq_global;
79744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
79844d362409d5469aed47d19e7908d19bd194493aThomas Graf
799e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystruct nfnl_queue {
800e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	NLHDR_COMMON
801e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
802e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_group;
803e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_maxlen;
804e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_copy_range;
805e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_copy_mode;
806e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy};
807e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
808e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardystruct nfnl_queue_msg {
809e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	NLHDR_COMMON
810e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
811e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_msg_group;
812e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_family;
813e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_hook;
814e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint16_t		queue_msg_hwproto;
815e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_packetid;
816e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_mark;
817e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	struct timeval		queue_msg_timestamp;
818e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_indev;
819e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_outdev;
820e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_physindev;
821e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_physoutdev;
822e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint8_t			queue_msg_hwaddr[8];
823e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	int			queue_msg_hwaddr_len;
824e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	void *			queue_msg_payload;
825e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	int			queue_msg_payload_len;
826e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy	uint32_t		queue_msg_verdict;
827e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy};
828e72cb033f2f7323b63f3e640a37e7a75558ab128Patrick McHardy
82944d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
830