1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */ 2*4dc78e53SAndroid Build Coastguard Worker /* 3*4dc78e53SAndroid Build Coastguard Worker * Copyright (c) 2003-2013 Thomas Graf <[email protected]> 4*4dc78e53SAndroid Build Coastguard Worker * Copyright (c) 2013 Sassano Systems LLC <[email protected]> 5*4dc78e53SAndroid Build Coastguard Worker */ 6*4dc78e53SAndroid Build Coastguard Worker 7*4dc78e53SAndroid Build Coastguard Worker #ifndef __NL_PRIVATE_TYPES_NL_ROUTE_H__ 8*4dc78e53SAndroid Build Coastguard Worker #define __NL_PRIVATE_TYPES_NL_ROUTE_H__ 9*4dc78e53SAndroid Build Coastguard Worker 10*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch { 11*4dc78e53SAndroid Build Coastguard Worker uint16_t e_id; 12*4dc78e53SAndroid Build Coastguard Worker uint16_t e_kind; 13*4dc78e53SAndroid Build Coastguard Worker uint16_t e_flags; 14*4dc78e53SAndroid Build Coastguard Worker uint16_t e_index; 15*4dc78e53SAndroid Build Coastguard Worker size_t e_datalen; 16*4dc78e53SAndroid Build Coastguard Worker 17*4dc78e53SAndroid Build Coastguard Worker struct nl_list_head e_childs; 18*4dc78e53SAndroid Build Coastguard Worker struct nl_list_head e_list; 19*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch_ops *e_ops; 20*4dc78e53SAndroid Build Coastguard Worker 21*4dc78e53SAndroid Build Coastguard Worker void *e_data; 22*4dc78e53SAndroid Build Coastguard Worker }; 23*4dc78e53SAndroid Build Coastguard Worker 24*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ematch_tree { 25*4dc78e53SAndroid Build Coastguard Worker uint16_t et_progid; 26*4dc78e53SAndroid Build Coastguard Worker struct nl_list_head et_list; 27*4dc78e53SAndroid Build Coastguard Worker }; 28*4dc78e53SAndroid Build Coastguard Worker 29*4dc78e53SAndroid Build Coastguard Worker /*****************************************************************************/ 30*4dc78e53SAndroid Build Coastguard Worker 31*4dc78e53SAndroid Build Coastguard Worker /** 32*4dc78e53SAndroid Build Coastguard Worker * Traffic control object operations 33*4dc78e53SAndroid Build Coastguard Worker * @ingroup tc 34*4dc78e53SAndroid Build Coastguard Worker * 35*4dc78e53SAndroid Build Coastguard Worker * This structure holds function pointers and settings implementing 36*4dc78e53SAndroid Build Coastguard Worker * the features of each traffic control object implementation. 37*4dc78e53SAndroid Build Coastguard Worker */ 38*4dc78e53SAndroid Build Coastguard Worker struct rtnl_tc_ops { 39*4dc78e53SAndroid Build Coastguard Worker /** 40*4dc78e53SAndroid Build Coastguard Worker * Name of traffic control module 41*4dc78e53SAndroid Build Coastguard Worker */ 42*4dc78e53SAndroid Build Coastguard Worker char *to_kind; 43*4dc78e53SAndroid Build Coastguard Worker 44*4dc78e53SAndroid Build Coastguard Worker /** 45*4dc78e53SAndroid Build Coastguard Worker * Type of traffic control object 46*4dc78e53SAndroid Build Coastguard Worker */ 47*4dc78e53SAndroid Build Coastguard Worker enum rtnl_tc_type to_type; 48*4dc78e53SAndroid Build Coastguard Worker 49*4dc78e53SAndroid Build Coastguard Worker /** 50*4dc78e53SAndroid Build Coastguard Worker * Size of private data 51*4dc78e53SAndroid Build Coastguard Worker */ 52*4dc78e53SAndroid Build Coastguard Worker size_t to_size; 53*4dc78e53SAndroid Build Coastguard Worker 54*4dc78e53SAndroid Build Coastguard Worker /** 55*4dc78e53SAndroid Build Coastguard Worker * Dump callbacks 56*4dc78e53SAndroid Build Coastguard Worker */ 57*4dc78e53SAndroid Build Coastguard Worker void (*to_dump[NL_DUMP_MAX + 1])(struct rtnl_tc *, void *, 58*4dc78e53SAndroid Build Coastguard Worker struct nl_dump_params *); 59*4dc78e53SAndroid Build Coastguard Worker /** 60*4dc78e53SAndroid Build Coastguard Worker * Used to fill the contents of TCA_OPTIONS 61*4dc78e53SAndroid Build Coastguard Worker */ 62*4dc78e53SAndroid Build Coastguard Worker int (*to_msg_fill)(struct rtnl_tc *, void *, struct nl_msg *); 63*4dc78e53SAndroid Build Coastguard Worker 64*4dc78e53SAndroid Build Coastguard Worker /** 65*4dc78e53SAndroid Build Coastguard Worker * Uesd to to fill tc related messages, unlike with to_msg_fill, 66*4dc78e53SAndroid Build Coastguard Worker * the contents is not encapsulated with a TCA_OPTIONS nested 67*4dc78e53SAndroid Build Coastguard Worker * attribute. 68*4dc78e53SAndroid Build Coastguard Worker */ 69*4dc78e53SAndroid Build Coastguard Worker int (*to_msg_fill_raw)(struct rtnl_tc *, void *, struct nl_msg *); 70*4dc78e53SAndroid Build Coastguard Worker 71*4dc78e53SAndroid Build Coastguard Worker /** 72*4dc78e53SAndroid Build Coastguard Worker * TCA_OPTIONS message parser 73*4dc78e53SAndroid Build Coastguard Worker */ 74*4dc78e53SAndroid Build Coastguard Worker int (*to_msg_parser)(struct rtnl_tc *, void *); 75*4dc78e53SAndroid Build Coastguard Worker 76*4dc78e53SAndroid Build Coastguard Worker /** 77*4dc78e53SAndroid Build Coastguard Worker * Called before a tc object is destroyed 78*4dc78e53SAndroid Build Coastguard Worker */ 79*4dc78e53SAndroid Build Coastguard Worker void (*to_free_data)(struct rtnl_tc *, void *); 80*4dc78e53SAndroid Build Coastguard Worker 81*4dc78e53SAndroid Build Coastguard Worker /** 82*4dc78e53SAndroid Build Coastguard Worker * Called whenever a classifier object needs to be cloned 83*4dc78e53SAndroid Build Coastguard Worker */ 84*4dc78e53SAndroid Build Coastguard Worker int (*to_clone)(void *, void *); 85*4dc78e53SAndroid Build Coastguard Worker 86*4dc78e53SAndroid Build Coastguard Worker /** 87*4dc78e53SAndroid Build Coastguard Worker * Internal, don't touch 88*4dc78e53SAndroid Build Coastguard Worker */ 89*4dc78e53SAndroid Build Coastguard Worker struct nl_list_head to_list; 90*4dc78e53SAndroid Build Coastguard Worker }; 91*4dc78e53SAndroid Build Coastguard Worker 92*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_tc_ops *rtnl_tc_lookup_ops(enum rtnl_tc_type, const char *); 93*4dc78e53SAndroid Build Coastguard Worker 94*4dc78e53SAndroid Build Coastguard Worker struct rtnl_tc_ops *rtnl_tc_get_ops(struct rtnl_tc *); 95*4dc78e53SAndroid Build Coastguard Worker 96*4dc78e53SAndroid Build Coastguard Worker struct rtnl_nexthop { 97*4dc78e53SAndroid Build Coastguard Worker uint8_t rtnh_flags; 98*4dc78e53SAndroid Build Coastguard Worker uint8_t rtnh_flag_mask; 99*4dc78e53SAndroid Build Coastguard Worker uint8_t rtnh_weight; 100*4dc78e53SAndroid Build Coastguard Worker /* 1 byte spare */ 101*4dc78e53SAndroid Build Coastguard Worker uint32_t rtnh_ifindex; 102*4dc78e53SAndroid Build Coastguard Worker struct nl_addr *rtnh_gateway; 103*4dc78e53SAndroid Build Coastguard Worker uint32_t ce_mask; /* HACK to support attr macros */ 104*4dc78e53SAndroid Build Coastguard Worker struct nl_list_head rtnh_list; 105*4dc78e53SAndroid Build Coastguard Worker uint32_t rtnh_realms; 106*4dc78e53SAndroid Build Coastguard Worker struct nl_addr *rtnh_newdst; 107*4dc78e53SAndroid Build Coastguard Worker struct nl_addr *rtnh_via; 108*4dc78e53SAndroid Build Coastguard Worker struct rtnl_nh_encap *rtnh_encap; 109*4dc78e53SAndroid Build Coastguard Worker }; 110*4dc78e53SAndroid Build Coastguard Worker 111*4dc78e53SAndroid Build Coastguard Worker #endif /* __NL_PRIVATE_TYPES_NL_ROUTE_H__ */ 112