netlink-types.h revision 44d362409d5469aed47d19e7908d19bd194493a
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 Grafenum { 9944d362409d5469aed47d19e7908d19bd194493aThomas Graf NL_ACT_UNSPEC, 10044d362409d5469aed47d19e7908d19bd194493aThomas Graf NL_ACT_NEW, 10144d362409d5469aed47d19e7908d19bd194493aThomas Graf NL_ACT_DEL, 10244d362409d5469aed47d19e7908d19bd194493aThomas Graf NL_ACT_GET, 10344d362409d5469aed47d19e7908d19bd194493aThomas Graf NL_ACT_SET, 10444d362409d5469aed47d19e7908d19bd194493aThomas Graf NL_ACT_CHANGE, 10544d362409d5469aed47d19e7908d19bd194493aThomas Graf __NL_ACT_MAX, 10644d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 10744d362409d5469aed47d19e7908d19bd194493aThomas Graf 10844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_ACT_MAX (__NL_ACT_MAX - 1) 10944d362409d5469aed47d19e7908d19bd194493aThomas Graf 11044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define END_OF_MSGTYPES_LIST { -1, -1, NULL } 11144d362409d5469aed47d19e7908d19bd194493aThomas Graf 11244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_msgtype 11344d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 11444d362409d5469aed47d19e7908d19bd194493aThomas Graf int mt_id; 11544d362409d5469aed47d19e7908d19bd194493aThomas Graf int mt_act; 11644d362409d5469aed47d19e7908d19bd194493aThomas Graf char * mt_name; 11744d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 11844d362409d5469aed47d19e7908d19bd194493aThomas Graf 11944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_info 12044d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 12144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct sockaddr_nl * who; 12244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nlmsghdr * nlh; 12344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct genlmsghdr * genlhdr; 12444d362409d5469aed47d19e7908d19bd194493aThomas Graf void * userhdr; 12544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nlattr ** attrs; 12644d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 12744d362409d5469aed47d19e7908d19bd194493aThomas Graf 12844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define LOOSE_FLAG_COMPARISON 1 12944d362409d5469aed47d19e7908d19bd194493aThomas Graf 13044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_object_ops 13144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 13244d362409d5469aed47d19e7908d19bd194493aThomas Graf /* Name of object */ 13344d362409d5469aed47d19e7908d19bd194493aThomas Graf char * oo_name; 13444d362409d5469aed47d19e7908d19bd194493aThomas Graf 13544d362409d5469aed47d19e7908d19bd194493aThomas Graf /* Size of object structure */ 13644d362409d5469aed47d19e7908d19bd194493aThomas Graf size_t oo_size; 13744d362409d5469aed47d19e7908d19bd194493aThomas Graf 13844d362409d5469aed47d19e7908d19bd194493aThomas Graf /* List of attributes needed to uniquely identify the object */ 13944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t oo_id_attrs; 14044d362409d5469aed47d19e7908d19bd194493aThomas Graf 14144d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 14244d362409d5469aed47d19e7908d19bd194493aThomas Graf * Called whenever a new object was allocated 14344d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 14444d362409d5469aed47d19e7908d19bd194493aThomas Graf void (*oo_constructor)(struct nl_object *); 14544d362409d5469aed47d19e7908d19bd194493aThomas Graf 14644d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 14744d362409d5469aed47d19e7908d19bd194493aThomas Graf * Called whenever a object in the cache gets destroyed, must 14844d362409d5469aed47d19e7908d19bd194493aThomas Graf * free the type specific memory allocations 14944d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 15044d362409d5469aed47d19e7908d19bd194493aThomas Graf void (*oo_free_data)(struct nl_object *); 15144d362409d5469aed47d19e7908d19bd194493aThomas Graf 15244d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 15344d362409d5469aed47d19e7908d19bd194493aThomas Graf * Callened whenever an object needs to be cloned 15444d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 15544d362409d5469aed47d19e7908d19bd194493aThomas Graf int (*oo_clone)(struct nl_object *, struct nl_object *); 15644d362409d5469aed47d19e7908d19bd194493aThomas Graf 15744d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 15844d362409d5469aed47d19e7908d19bd194493aThomas Graf * Called whenever a dump of a cache object is requested. Must 15944d362409d5469aed47d19e7908d19bd194493aThomas Graf * dump the specified object to the specified file descriptor 16044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 16144d362409d5469aed47d19e7908d19bd194493aThomas Graf int (*oo_dump[NL_DUMP_MAX+1])(struct nl_object *, 16244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_dump_params *); 16344d362409d5469aed47d19e7908d19bd194493aThomas Graf 16444d362409d5469aed47d19e7908d19bd194493aThomas Graf int (*oo_compare)(struct nl_object *, struct nl_object *, 16544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t, int); 16644d362409d5469aed47d19e7908d19bd194493aThomas Graf 16744d362409d5469aed47d19e7908d19bd194493aThomas Graf 16844d362409d5469aed47d19e7908d19bd194493aThomas Graf char *(*oo_attrs2str)(int, char *, size_t); 16944d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 17044d362409d5469aed47d19e7908d19bd194493aThomas Graf 17144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_af_group 17244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 17344d362409d5469aed47d19e7908d19bd194493aThomas Graf int ag_family; 17444d362409d5469aed47d19e7908d19bd194493aThomas Graf int ag_group; 17544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 17644d362409d5469aed47d19e7908d19bd194493aThomas Graf 17744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define END_OF_GROUP_LIST AF_UNSPEC, 0 17844d362409d5469aed47d19e7908d19bd194493aThomas Graf 17944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_cache_ops 18044d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 18144d362409d5469aed47d19e7908d19bd194493aThomas Graf char * co_name; 18244d362409d5469aed47d19e7908d19bd194493aThomas Graf int co_hdrsize; 18344d362409d5469aed47d19e7908d19bd194493aThomas Graf int co_protocol; 18444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_af_group * co_groups; 18544d362409d5469aed47d19e7908d19bd194493aThomas Graf 18644d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 18744d362409d5469aed47d19e7908d19bd194493aThomas Graf * Called whenever an update of the cache is required. Must send 18844d362409d5469aed47d19e7908d19bd194493aThomas Graf * a request message to the kernel requesting a complete dump. 18944d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 19044d362409d5469aed47d19e7908d19bd194493aThomas Graf int (*co_request_update)(struct nl_cache *, struct nl_handle *); 19144d362409d5469aed47d19e7908d19bd194493aThomas Graf 19244d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 19344d362409d5469aed47d19e7908d19bd194493aThomas Graf * Called whenever a message was received that needs to be parsed. 19444d362409d5469aed47d19e7908d19bd194493aThomas Graf * Must parse the message and call the paser callback function 19544d362409d5469aed47d19e7908d19bd194493aThomas Graf * (nl_parser_param) provided via the argument. 19644d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 19744d362409d5469aed47d19e7908d19bd194493aThomas Graf int (*co_msg_parser)(struct nl_cache_ops *, struct sockaddr_nl *, 19844d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nlmsghdr *, void *); 19944d362409d5469aed47d19e7908d19bd194493aThomas Graf 20044d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_object_ops * co_obj_ops; 20144d362409d5469aed47d19e7908d19bd194493aThomas Graf 20244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_cache_ops *co_next; 20344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_cache *co_major_cache; 20444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct genl_ops * co_genl; 20544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_msgtype co_msgtypes[]; 20644d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 20744d362409d5469aed47d19e7908d19bd194493aThomas Graf 20844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_OBJ_MARK 1 20944d362409d5469aed47d19e7908d19bd194493aThomas Graf 21044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NLHDR_COMMON \ 21144d362409d5469aed47d19e7908d19bd194493aThomas Graf int ce_refcnt; \ 21244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_object_ops * ce_ops; \ 21344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_cache * ce_cache; \ 21444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_list_head ce_list; \ 21544d362409d5469aed47d19e7908d19bd194493aThomas Graf int ce_msgtype; \ 21644d362409d5469aed47d19e7908d19bd194493aThomas Graf int ce_flags; \ 21744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ce_mask; 21844d362409d5469aed47d19e7908d19bd194493aThomas Graf 21944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_object 22044d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 22144d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 22244d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 22344d362409d5469aed47d19e7908d19bd194493aThomas Graf 22444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_parser_param 22544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 22644d362409d5469aed47d19e7908d19bd194493aThomas Graf int (*pp_cb)(struct nl_object *, struct nl_parser_param *); 22744d362409d5469aed47d19e7908d19bd194493aThomas Graf void * pp_arg; 22844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 22944d362409d5469aed47d19e7908d19bd194493aThomas Graf 23044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_data 23144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 23244d362409d5469aed47d19e7908d19bd194493aThomas Graf size_t d_size; 23344d362409d5469aed47d19e7908d19bd194493aThomas Graf void * d_data; 23444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 23544d362409d5469aed47d19e7908d19bd194493aThomas Graf 23644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_addr 23744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 23844d362409d5469aed47d19e7908d19bd194493aThomas Graf int a_family; 23944d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned int a_maxsize; 24044d362409d5469aed47d19e7908d19bd194493aThomas Graf unsigned int a_len; 24144d362409d5469aed47d19e7908d19bd194493aThomas Graf int a_prefixlen; 24244d362409d5469aed47d19e7908d19bd194493aThomas Graf int a_refcnt; 24344d362409d5469aed47d19e7908d19bd194493aThomas Graf char a_addr[0]; 24444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 24544d362409d5469aed47d19e7908d19bd194493aThomas Graf 24644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nl_msg 24744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 24844d362409d5469aed47d19e7908d19bd194493aThomas Graf int nm_protocol; 24944d362409d5469aed47d19e7908d19bd194493aThomas Graf int nm_flags; 25044d362409d5469aed47d19e7908d19bd194493aThomas Graf struct sockaddr_nl nm_src; 25144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct sockaddr_nl nm_dst; 25244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct ucred nm_creds; 25344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nlmsghdr * nm_nlh; 25444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 25544d362409d5469aed47d19e7908d19bd194493aThomas Graf 25644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_link_map 25744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 25844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t lm_mem_start; 25944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t lm_mem_end; 26044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t lm_base_addr; 26144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t lm_irq; 26244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t lm_dma; 26344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t lm_port; 26444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 26544d362409d5469aed47d19e7908d19bd194493aThomas Graf 26644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define IFQDISCSIZ 32 26744d362409d5469aed47d19e7908d19bd194493aThomas Graf 26844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_link 26944d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 27044d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 27144d362409d5469aed47d19e7908d19bd194493aThomas Graf 27244d362409d5469aed47d19e7908d19bd194493aThomas Graf char l_name[IFNAMSIZ]; 27344d362409d5469aed47d19e7908d19bd194493aThomas Graf 27444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_family; 27544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_arptype; 27644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_index; 27744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_flags; 27844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_change; 27944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_mtu; 28044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_link; 28144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_txqlen; 28244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_weight; 28344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_master; 28444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *l_addr; 28544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *l_bcast; 28644d362409d5469aed47d19e7908d19bd194493aThomas Graf char l_qdisc[IFQDISCSIZ]; 28744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_link_map l_map; 28844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t l_stats[RTNL_LINK_STATS_MAX+1]; 28944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t l_flag_mask; 29044d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 29144d362409d5469aed47d19e7908d19bd194493aThomas Graf 29244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_ncacheinfo 29344d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 29444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nci_confirmed; /**< Time since neighbour validty was last confirmed */ 29544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nci_used; /**< Time since neighbour entry was last ued */ 29644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nci_updated; /**< Time since last update */ 29744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nci_refcnt; /**< Reference counter */ 29844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 29944d362409d5469aed47d19e7908d19bd194493aThomas Graf 30044d362409d5469aed47d19e7908d19bd194493aThomas Graf 30144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neigh 30244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 30344d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 30444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t n_family; 30544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t n_ifindex; 30644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t n_state; 30744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t n_flags; 30844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t n_type; 30944d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *n_lladdr; 31044d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *n_dst; 31144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t n_probes; 31244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_ncacheinfo n_cacheinfo; 31344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t n_state_mask; 31444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t n_flag_mask; 31544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 31644d362409d5469aed47d19e7908d19bd194493aThomas Graf 31744d362409d5469aed47d19e7908d19bd194493aThomas Graf 31844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_addr_cacheinfo 31944d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 32044d362409d5469aed47d19e7908d19bd194493aThomas Graf /* Preferred lifetime in seconds */ 32144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t aci_prefered; 32244d362409d5469aed47d19e7908d19bd194493aThomas Graf 32344d362409d5469aed47d19e7908d19bd194493aThomas Graf /* Valid lifetime in seconds */ 32444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t aci_valid; 32544d362409d5469aed47d19e7908d19bd194493aThomas Graf 32644d362409d5469aed47d19e7908d19bd194493aThomas Graf /* Timestamp of creation in 1/100s seince boottime */ 32744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t aci_cstamp; 32844d362409d5469aed47d19e7908d19bd194493aThomas Graf 32944d362409d5469aed47d19e7908d19bd194493aThomas Graf /* Timestamp of last update in 1/100s since boottime */ 33044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t aci_tstamp; 33144d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 33244d362409d5469aed47d19e7908d19bd194493aThomas Graf 33344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_addr 33444d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 33544d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 33644d362409d5469aed47d19e7908d19bd194493aThomas Graf 33744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t a_family; 33844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t a_prefixlen; 33944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t a_flags; 34044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t a_scope; 34144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t a_ifindex; 34244d362409d5469aed47d19e7908d19bd194493aThomas Graf 34344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *a_peer; 34444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *a_local; 34544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *a_bcast; 34644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *a_anycast; 34744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *a_multicast; 34844d362409d5469aed47d19e7908d19bd194493aThomas Graf 34944d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_addr_cacheinfo a_cacheinfo; 35044d362409d5469aed47d19e7908d19bd194493aThomas Graf 35144d362409d5469aed47d19e7908d19bd194493aThomas Graf char a_label[IFNAMSIZ]; 35244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t a_flag_mask; 35344d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 35444d362409d5469aed47d19e7908d19bd194493aThomas Graf 35544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NEXTHOP_HAS_FLAGS 0x000001 35644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NEXTHOP_HAS_WEIGHT 0x000002 35744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NEXTHOP_HAS_IFINDEX 0x000004 35844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NEXTHOP_HAS_GATEWAY 0x000008 35944d362409d5469aed47d19e7908d19bd194493aThomas Graf 36044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_nexthop 36144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 36244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rtnh_flags; 36344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rtnh_flag_mask; 36444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rtnh_weight; 36544d362409d5469aed47d19e7908d19bd194493aThomas Graf /* 1 byte spare */ 36644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t rtnh_ifindex; 36744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr * rtnh_gateway; 36844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t rtnh_mask; 36944d362409d5469aed47d19e7908d19bd194493aThomas Graf 37044d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_list_head rtnh_list; 37144d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 37244d362409d5469aed47d19e7908d19bd194493aThomas Graf 37344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_route 37444d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 37544d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 37644d362409d5469aed47d19e7908d19bd194493aThomas Graf 37744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rt_family; 37844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rt_dst_len; 37944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rt_src_len; 38044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rt_tos; 38144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rt_table; 38244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rt_protocol; 38344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rt_scope; 38444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rt_type; 38544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t rt_flags; 38644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr * rt_dst; 38744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr * rt_src; 38844d362409d5469aed47d19e7908d19bd194493aThomas Graf char rt_iif[IFNAMSIZ]; 38944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t rt_oif; 39044d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr * rt_gateway; 39144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t rt_prio; 39244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t rt_metrics[RTAX_MAX]; 39344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t rt_metrics_mask; 39444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr * rt_pref_src; 39544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_list_head rt_nexthops; 39644d362409d5469aed47d19e7908d19bd194493aThomas Graf realm_t rt_realms; 39744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_rtcacheinfo rt_cacheinfo; 39844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t rt_mp_algo; 39944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t rt_flag_mask; 40044d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 40144d362409d5469aed47d19e7908d19bd194493aThomas Graf 40244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_rule 40344d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 40444d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 40544d362409d5469aed47d19e7908d19bd194493aThomas Graf 40644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t r_mark; 40744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t r_prio; 40844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t r_realms; 40944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t r_table; 41044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t r_dsfield; 41144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t r_type; 41244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t r_family; 41344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t r_src_len; 41444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t r_dst_len; 41544d362409d5469aed47d19e7908d19bd194493aThomas Graf char r_iif[IFNAMSIZ]; 41644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *r_src; 41744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *r_dst; 41844d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr *r_srcmap; 41944d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 42044d362409d5469aed47d19e7908d19bd194493aThomas Graf 42144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neightbl_parms 42244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 42344d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 42444d362409d5469aed47d19e7908d19bd194493aThomas Graf * Interface index of the device this parameter set is assigned 42544d362409d5469aed47d19e7908d19bd194493aThomas Graf * to or 0 for the default set. 42644d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 42744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ntp_ifindex; 42844d362409d5469aed47d19e7908d19bd194493aThomas Graf 42944d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 43044d362409d5469aed47d19e7908d19bd194493aThomas Graf * Number of references to this parameter set. 43144d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 43244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ntp_refcnt; 43344d362409d5469aed47d19e7908d19bd194493aThomas Graf 43444d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 43544d362409d5469aed47d19e7908d19bd194493aThomas Graf * Queue length for pending arp requests, i.e. the number of 43644d362409d5469aed47d19e7908d19bd194493aThomas Graf * packets which are accepted from other layers while the 43744d362409d5469aed47d19e7908d19bd194493aThomas Graf * neighbour address is still being resolved 43844d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 43944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ntp_queue_len; 44044d362409d5469aed47d19e7908d19bd194493aThomas Graf 44144d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 44244d362409d5469aed47d19e7908d19bd194493aThomas Graf * Number of requests to send to the user level ARP daemon. 44344d362409d5469aed47d19e7908d19bd194493aThomas Graf * Specify 0 to disable. 44444d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 44544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ntp_app_probes; 44644d362409d5469aed47d19e7908d19bd194493aThomas Graf 44744d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 44844d362409d5469aed47d19e7908d19bd194493aThomas Graf * Maximum number of retries for unicast solicitation. 44944d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 45044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ntp_ucast_probes; 45144d362409d5469aed47d19e7908d19bd194493aThomas Graf 45244d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 45344d362409d5469aed47d19e7908d19bd194493aThomas Graf * Maximum number of retries for multicast solicitation. 45444d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 45544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ntp_mcast_probes; 45644d362409d5469aed47d19e7908d19bd194493aThomas Graf 45744d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 45844d362409d5469aed47d19e7908d19bd194493aThomas Graf * Base value in milliseconds to ompute reachable time, see RFC2461. 45944d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 46044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t ntp_base_reachable_time; 46144d362409d5469aed47d19e7908d19bd194493aThomas Graf 46244d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 46344d362409d5469aed47d19e7908d19bd194493aThomas Graf * Actual reachable time (read-only) 46444d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 46544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t ntp_reachable_time; /* secs */ 46644d362409d5469aed47d19e7908d19bd194493aThomas Graf 46744d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 46844d362409d5469aed47d19e7908d19bd194493aThomas Graf * The time in milliseconds between retransmitted Neighbor 46944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Solicitation messages. 47044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 47144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t ntp_retrans_time; 47244d362409d5469aed47d19e7908d19bd194493aThomas Graf 47344d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 47444d362409d5469aed47d19e7908d19bd194493aThomas Graf * Interval in milliseconds to check for stale neighbour 47544d362409d5469aed47d19e7908d19bd194493aThomas Graf * entries. 47644d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 47744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t ntp_gc_stale_time; /* secs */ 47844d362409d5469aed47d19e7908d19bd194493aThomas Graf 47944d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 48044d362409d5469aed47d19e7908d19bd194493aThomas Graf * Delay in milliseconds for the first time probe if 48144d362409d5469aed47d19e7908d19bd194493aThomas Graf * the neighbour is reachable. 48244d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 48344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t ntp_probe_delay; /* secs */ 48444d362409d5469aed47d19e7908d19bd194493aThomas Graf 48544d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 48644d362409d5469aed47d19e7908d19bd194493aThomas Graf * Maximum delay in milliseconds of an answer to a neighbour 48744d362409d5469aed47d19e7908d19bd194493aThomas Graf * solicitation message. 48844d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 48944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t ntp_anycast_delay; 49044d362409d5469aed47d19e7908d19bd194493aThomas Graf 49144d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 49244d362409d5469aed47d19e7908d19bd194493aThomas Graf * Minimum age in milliseconds before a neighbour entry 49344d362409d5469aed47d19e7908d19bd194493aThomas Graf * may be replaced. 49444d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 49544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t ntp_locktime; 49644d362409d5469aed47d19e7908d19bd194493aThomas Graf 49744d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 49844d362409d5469aed47d19e7908d19bd194493aThomas Graf * Delay in milliseconds before answering to an ARP request 49944d362409d5469aed47d19e7908d19bd194493aThomas Graf * for which a proxy ARP entry exists. 50044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 50144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t ntp_proxy_delay; 50244d362409d5469aed47d19e7908d19bd194493aThomas Graf 50344d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 50444d362409d5469aed47d19e7908d19bd194493aThomas Graf * Queue length for the delayed proxy arp requests. 50544d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 50644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ntp_proxy_qlen; 50744d362409d5469aed47d19e7908d19bd194493aThomas Graf 50844d362409d5469aed47d19e7908d19bd194493aThomas Graf /** 50944d362409d5469aed47d19e7908d19bd194493aThomas Graf * Mask of available parameter attributes 51044d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 51144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ntp_mask; 51244d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 51344d362409d5469aed47d19e7908d19bd194493aThomas Graf 51444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NTBLNAMSIZ 32 51544d362409d5469aed47d19e7908d19bd194493aThomas Graf 51644d362409d5469aed47d19e7908d19bd194493aThomas Graf/** 51744d362409d5469aed47d19e7908d19bd194493aThomas Graf * Neighbour table 51844d362409d5469aed47d19e7908d19bd194493aThomas Graf * @ingroup neightbl 51944d362409d5469aed47d19e7908d19bd194493aThomas Graf */ 52044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_neightbl 52144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 52244d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 52344d362409d5469aed47d19e7908d19bd194493aThomas Graf 52444d362409d5469aed47d19e7908d19bd194493aThomas Graf char nt_name[NTBLNAMSIZ]; 52544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nt_family; 52644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nt_gc_thresh1; 52744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nt_gc_thresh2; 52844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nt_gc_thresh3; 52944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t nt_gc_interval; 53044d362409d5469aed47d19e7908d19bd194493aThomas Graf struct ndt_config nt_config; 53144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_neightbl_parms nt_parms; 53244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct ndt_stats nt_stats; 53344d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 53444d362409d5469aed47d19e7908d19bd194493aThomas Graf 53544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_ratespec 53644d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 53744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t rs_cell_log; 53844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t rs_feature; 53944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t rs_addend; 54044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t rs_mpu; 54144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t rs_rate; 54244d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 54344d362409d5469aed47d19e7908d19bd194493aThomas Graf 54444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tstats 54544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 54644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct { 54744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t bytes; 54844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t packets; 54944d362409d5469aed47d19e7908d19bd194493aThomas Graf } tcs_basic; 55044d362409d5469aed47d19e7908d19bd194493aThomas Graf 55144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct { 55244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t bps; 55344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t pps; 55444d362409d5469aed47d19e7908d19bd194493aThomas Graf } tcs_rate_est; 55544d362409d5469aed47d19e7908d19bd194493aThomas Graf 55644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct { 55744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qlen; 55844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t backlog; 55944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t drops; 56044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t requeues; 56144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t overlimits; 56244d362409d5469aed47d19e7908d19bd194493aThomas Graf } tcs_queue; 56344d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 56444d362409d5469aed47d19e7908d19bd194493aThomas Graf 56544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCKINDSIZ 32 56644d362409d5469aed47d19e7908d19bd194493aThomas Graf 56744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NL_TCA_GENERIC(pre) \ 56844d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON \ 56944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t pre ##_family; \ 57044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t pre ##_ifindex; \ 57144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t pre ##_handle; \ 57244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t pre ##_parent; \ 57344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t pre ##_info; \ 57444d362409d5469aed47d19e7908d19bd194493aThomas Graf char pre ##_kind[TCKINDSIZ]; \ 57544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_data * pre ##_opts; \ 57644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t pre ##_stats[RTNL_TC_STATS_MAX+1]; \ 57744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_data * pre ##_xstats; \ 57844d362409d5469aed47d19e7908d19bd194493aThomas Graf void * pre ##_subdata; \ 57944d362409d5469aed47d19e7908d19bd194493aThomas Graf 58044d362409d5469aed47d19e7908d19bd194493aThomas Graf 58144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tca 58244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 58344d362409d5469aed47d19e7908d19bd194493aThomas Graf NL_TCA_GENERIC(tc); 58444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 58544d362409d5469aed47d19e7908d19bd194493aThomas Graf 58644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_qdisc 58744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 58844d362409d5469aed47d19e7908d19bd194493aThomas Graf NL_TCA_GENERIC(q); 58944d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_qdisc_ops *q_ops; 59044d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 59144d362409d5469aed47d19e7908d19bd194493aThomas Graf 59244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_class 59344d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 59444d362409d5469aed47d19e7908d19bd194493aThomas Graf NL_TCA_GENERIC(c); 59544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_class_ops *c_ops; 59644d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 59744d362409d5469aed47d19e7908d19bd194493aThomas Graf 59844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_cls 59944d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 60044d362409d5469aed47d19e7908d19bd194493aThomas Graf NL_TCA_GENERIC(c); 60144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t c_prio; 60244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t c_protocol; 60344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_cls_ops *c_ops; 60444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 60544d362409d5469aed47d19e7908d19bd194493aThomas Graf 60644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_u32 60744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 60844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t cu_divisor; 60944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t cu_hash; 61044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t cu_classid; 61144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t cu_link; 61244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_data * cu_pcnt; 61344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_data * cu_selector; 61444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_data * cu_act; 61544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_data * cu_police; 61644d362409d5469aed47d19e7908d19bd194493aThomas Graf char cu_indev[IFNAMSIZ]; 61744d362409d5469aed47d19e7908d19bd194493aThomas Graf int cu_mask; 61844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 61944d362409d5469aed47d19e7908d19bd194493aThomas Graf 62044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_fw 62144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 62244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t cf_classid; 62344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_data * cf_act; 62444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_data * cf_police; 62544d362409d5469aed47d19e7908d19bd194493aThomas Graf char cf_indev[IFNAMSIZ]; 62644d362409d5469aed47d19e7908d19bd194493aThomas Graf int cf_mask; 62744d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 62844d362409d5469aed47d19e7908d19bd194493aThomas Graf 62944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_dsmark_qdisc 63044d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 63144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t qdm_indices; 63244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t qdm_default_index; 63344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qdm_set_tc_index; 63444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qdm_mask; 63544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 63644d362409d5469aed47d19e7908d19bd194493aThomas Graf 63744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_dsmark_class 63844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 63944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t cdm_bmask; 64044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t cdm_value; 64144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t cdm_mask; 64244d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 64344d362409d5469aed47d19e7908d19bd194493aThomas Graf 64444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_fifo 64544d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 64644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qf_limit; 64744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qf_mask; 64844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 64944d362409d5469aed47d19e7908d19bd194493aThomas Graf 65044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_prio 65144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 65244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qp_bands; 65344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t qp_priomap[TC_PRIO_MAX+1]; 65444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qp_mask; 65544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 65644d362409d5469aed47d19e7908d19bd194493aThomas Graf 65744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_tbf 65844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 65944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qt_limit; 66044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qt_mpu; 66144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_ratespec qt_rate; 66244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qt_rate_bucket; 66344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qt_rate_txtime; 66444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_ratespec qt_peakrate; 66544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qt_peakrate_bucket; 66644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qt_peakrate_txtime; 66744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qt_mask; 66844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 66944d362409d5469aed47d19e7908d19bd194493aThomas Graf 67044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_sfq 67144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 67244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qs_quantum; 67344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qs_perturb; 67444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qs_limit; 67544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qs_divisor; 67644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qs_flows; 67744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qs_mask; 67844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 67944d362409d5469aed47d19e7908d19bd194493aThomas Graf 68044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem_corr 68144d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 68244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nmc_delay; 68344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nmc_loss; 68444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nmc_duplicate; 68544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 68644d362409d5469aed47d19e7908d19bd194493aThomas Graf 68744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem_reo 68844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 68944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nmro_probability; 69044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t nmro_correlation; 69144d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 69244d362409d5469aed47d19e7908d19bd194493aThomas Graf 69344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_netem 69444d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 69544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qnm_latency; 69644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qnm_limit; 69744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qnm_loss; 69844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qnm_gap; 69944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qnm_duplicate; 70044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qnm_jitter; 70144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qnm_mask; 70244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_netem_corr qnm_corr; 70344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_netem_reo qnm_ro; 70444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 70544d362409d5469aed47d19e7908d19bd194493aThomas Graf 70644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_htb_qdisc 70744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 70844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qh_rate2quantum; 70944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qh_defcls; 71044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qh_mask; 71144d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 71244d362409d5469aed47d19e7908d19bd194493aThomas Graf 71344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_htb_class 71444d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 71544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ch_prio; 71644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ch_mtu; 71744d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_ratespec ch_rate; 71844d362409d5469aed47d19e7908d19bd194493aThomas Graf struct rtnl_ratespec ch_ceil; 71944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ch_rbuffer; 72044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ch_cbuffer; 72144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ch_quantum; 72244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t ch_overhead; 72344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t ch_mpu; 72444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ch_mask; 72544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 72644d362409d5469aed47d19e7908d19bd194493aThomas Graf 72744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_cbq 72844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 72944d362409d5469aed47d19e7908d19bd194493aThomas Graf struct tc_cbq_lssopt cbq_lss; 73044d362409d5469aed47d19e7908d19bd194493aThomas Graf struct tc_ratespec cbq_rate; 73144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct tc_cbq_wrropt cbq_wrr; 73244d362409d5469aed47d19e7908d19bd194493aThomas Graf struct tc_cbq_ovl cbq_ovl; 73344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct tc_cbq_fopt cbq_fopt; 73444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct tc_cbq_police cbq_police; 73544d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 73644d362409d5469aed47d19e7908d19bd194493aThomas Graf 73744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct rtnl_red 73844d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 73944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qr_limit; 74044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qr_qth_min; 74144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qr_qth_max; 74244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t qr_flags; 74344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t qr_wlog; 74444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t qr_plog; 74544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t qr_scell_log; 74644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t qr_mask; 74744d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 74844d362409d5469aed47d19e7908d19bd194493aThomas Graf 74944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct flnl_request 75044d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 75144d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 75244d362409d5469aed47d19e7908d19bd194493aThomas Graf 75344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr * lr_addr; 75444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t lr_fwmark; 75544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t lr_tos; 75644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t lr_scope; 75744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t lr_table; 75844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 75944d362409d5469aed47d19e7908d19bd194493aThomas Graf 76044d362409d5469aed47d19e7908d19bd194493aThomas Graf 76144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct flnl_result 76244d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 76344d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 76444d362409d5469aed47d19e7908d19bd194493aThomas Graf 76544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct flnl_request * fr_req; 76644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t fr_table_id; 76744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t fr_prefixlen; 76844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t fr_nh_sel; 76944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t fr_type; 77044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t fr_scope; 77144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t fr_error; 77244d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 77344d362409d5469aed47d19e7908d19bd194493aThomas Graf 77444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_POLICY 1 77544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_DOIT 2 77644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define GENL_OP_HAS_DUMPIT 4 77744d362409d5469aed47d19e7908d19bd194493aThomas Graf 77844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_family_op 77944d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 78044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t o_id; 78144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t o_flags; 78244d362409d5469aed47d19e7908d19bd194493aThomas Graf 78344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_list_head o_list; 78444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 78544d362409d5469aed47d19e7908d19bd194493aThomas Graf 78644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct genl_family 78744d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 78844d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 78944d362409d5469aed47d19e7908d19bd194493aThomas Graf 79044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t gf_id; 79144d362409d5469aed47d19e7908d19bd194493aThomas Graf char gf_name[GENL_NAMSIZ]; 79244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t gf_version; 79344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t gf_hdrsize; 79444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t gf_maxattr; 79544d362409d5469aed47d19e7908d19bd194493aThomas Graf 79644d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_list_head gf_ops; 79744d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 79844d362409d5469aed47d19e7908d19bd194493aThomas Graf 79944d362409d5469aed47d19e7908d19bd194493aThomas Grafunion nfnl_ct_proto 80044d362409d5469aed47d19e7908d19bd194493aThomas Graf{ 80144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct { 80244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t src; 80344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t dst; 80444d362409d5469aed47d19e7908d19bd194493aThomas Graf } port; 80544d362409d5469aed47d19e7908d19bd194493aThomas Graf struct { 80644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t id; 80744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t type; 80844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t code; 80944d362409d5469aed47d19e7908d19bd194493aThomas Graf } icmp; 81044d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 81144d362409d5469aed47d19e7908d19bd194493aThomas Graf 81244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_ct_dir { 81344d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr * src; 81444d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nl_addr * dst; 81544d362409d5469aed47d19e7908d19bd194493aThomas Graf union nfnl_ct_proto proto; 81644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t packets; 81744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint64_t bytes; 81844d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 81944d362409d5469aed47d19e7908d19bd194493aThomas Graf 82044d362409d5469aed47d19e7908d19bd194493aThomas Grafunion nfnl_ct_protoinfo { 82144d362409d5469aed47d19e7908d19bd194493aThomas Graf struct { 82244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t state; 82344d362409d5469aed47d19e7908d19bd194493aThomas Graf } tcp; 82444d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 82544d362409d5469aed47d19e7908d19bd194493aThomas Graf 82644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_ct { 82744d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 82844d362409d5469aed47d19e7908d19bd194493aThomas Graf 82944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t ct_family; 83044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t ct_proto; 83144d362409d5469aed47d19e7908d19bd194493aThomas Graf union nfnl_ct_protoinfo ct_protoinfo; 83244d362409d5469aed47d19e7908d19bd194493aThomas Graf 83344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ct_status; 83444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ct_timeout; 83544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ct_mark; 83644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ct_use; 83744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t ct_id; 83844d362409d5469aed47d19e7908d19bd194493aThomas Graf 83944d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nfnl_ct_dir ct_orig; 84044d362409d5469aed47d19e7908d19bd194493aThomas Graf struct nfnl_ct_dir ct_repl; 84144d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 84244d362409d5469aed47d19e7908d19bd194493aThomas Graf 84344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct nfnl_log { 84444d362409d5469aed47d19e7908d19bd194493aThomas Graf NLHDR_COMMON 84544d362409d5469aed47d19e7908d19bd194493aThomas Graf 84644d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t log_family; 84744d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t log_hook; 84844d362409d5469aed47d19e7908d19bd194493aThomas Graf uint16_t log_hwproto; 84944d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t log_mark; 85044d362409d5469aed47d19e7908d19bd194493aThomas Graf struct timeval log_timestamp; 85144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t log_indev; 85244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t log_outdev; 85344d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t log_physindev; 85444d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t log_physoutdev; 85544d362409d5469aed47d19e7908d19bd194493aThomas Graf uint8_t log_hwaddr[8]; 85644d362409d5469aed47d19e7908d19bd194493aThomas Graf int log_hwaddr_len; 85744d362409d5469aed47d19e7908d19bd194493aThomas Graf void * log_payload; 85844d362409d5469aed47d19e7908d19bd194493aThomas Graf int log_payload_len; 85944d362409d5469aed47d19e7908d19bd194493aThomas Graf char * log_prefix; 86044d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t log_uid; 86144d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t log_seq; 86244d362409d5469aed47d19e7908d19bd194493aThomas Graf uint32_t log_seq_global; 86344d362409d5469aed47d19e7908d19bd194493aThomas Graf}; 86444d362409d5469aed47d19e7908d19bd194493aThomas Graf 86544d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif 866