1 /* 2 * netifd - network interface daemon 3 * Copyright (C) 2012 Felix Fietkau <nbd@openwrt.org> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License version 2 7 * as published by the Free Software Foundation 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 */ 14 #ifndef __NETIFD_SYSTEM_H 15 #define __NETIFD_SYSTEM_H 16 17 #include <net/if.h> 18 #include <sys/time.h> 19 #include <sys/socket.h> 20 #include <arpa/inet.h> 21 #include "device.h" 22 #include "interface-ip.h" 23 #include "iprule.h" 24 #include "utils.h" 25 26 enum tunnel_param { 27 TUNNEL_ATTR_TYPE, 28 TUNNEL_ATTR_REMOTE, 29 TUNNEL_ATTR_LOCAL, 30 TUNNEL_ATTR_MTU, 31 TUNNEL_ATTR_DF, 32 TUNNEL_ATTR_TTL, 33 TUNNEL_ATTR_TOS, 34 TUNNEL_ATTR_LINK, 35 TUNNEL_ATTR_DATA, 36 __TUNNEL_ATTR_MAX 37 }; 38 39 extern const struct uci_blob_param_list tunnel_attr_list; 40 41 enum vxlan_data { 42 VXLAN_DATA_ATTR_ID, 43 VXLAN_DATA_ATTR_PORT, 44 VXLAN_DATA_ATTR_MACADDR, 45 VXLAN_DATA_ATTR_RXCSUM, 46 VXLAN_DATA_ATTR_TXCSUM, 47 VXLAN_DATA_ATTR_SRCPORTMIN, 48 VXLAN_DATA_ATTR_SRCPORTMAX, 49 VXLAN_DATA_ATTR_LEARNING, 50 VXLAN_DATA_ATTR_RSC, 51 VXLAN_DATA_ATTR_PROXY, 52 VXLAN_DATA_ATTR_L2MISS, 53 VXLAN_DATA_ATTR_L3MISS, 54 VXLAN_DATA_ATTR_GBP, 55 VXLAN_DATA_ATTR_AGEING, 56 VXLAN_DATA_ATTR_LIMIT, 57 __VXLAN_DATA_ATTR_MAX 58 }; 59 60 enum gre_data { 61 GRE_DATA_IKEY, 62 GRE_DATA_OKEY, 63 GRE_DATA_ICSUM, 64 GRE_DATA_OCSUM, 65 GRE_DATA_ISEQNO, 66 GRE_DATA_OSEQNO, 67 GRE_DATA_ENCAPLIMIT, 68 __GRE_DATA_ATTR_MAX 69 }; 70 71 enum vti_data { 72 VTI_DATA_IKEY, 73 VTI_DATA_OKEY, 74 __VTI_DATA_ATTR_MAX 75 }; 76 77 enum xfrm_data { 78 XFRM_DATA_IF_ID, 79 __XFRM_DATA_ATTR_MAX 80 }; 81 82 enum sixrd_data { 83 SIXRD_DATA_PREFIX, 84 SIXRD_DATA_RELAY_PREFIX, 85 __SIXRD_DATA_ATTR_MAX 86 }; 87 88 enum ipip6_data { 89 IPIP6_DATA_ENCAPLIMIT, 90 IPIP6_DATA_FMRS, 91 __IPIP6_DATA_ATTR_MAX 92 }; 93 94 enum fmr_data { 95 FMR_DATA_PREFIX6, 96 FMR_DATA_PREFIX4, 97 FMR_DATA_EALEN, 98 FMR_DATA_OFFSET, 99 __FMR_DATA_ATTR_MAX 100 }; 101 102 extern const struct uci_blob_param_list vxlan_data_attr_list; 103 extern const struct uci_blob_param_list gre_data_attr_list; 104 extern const struct uci_blob_param_list vti_data_attr_list; 105 extern const struct uci_blob_param_list xfrm_data_attr_list; 106 extern const struct uci_blob_param_list sixrd_data_attr_list; 107 extern const struct uci_blob_param_list ipip6_data_attr_list; 108 extern const struct uci_blob_param_list fmr_data_attr_list; 109 110 enum bridge_opt { 111 /* stp, forward delay, max age and hello time are always set */ 112 BRIDGE_OPT_AGEING_TIME = (1 << 0), 113 BRIDGE_OPT_ROBUSTNESS = (1 << 1), 114 BRIDGE_OPT_QUERY_INTERVAL = (1 << 2), 115 BRIDGE_OPT_QUERY_RESPONSE_INTERVAL = (1 << 3), 116 BRIDGE_OPT_LAST_MEMBER_INTERVAL = (1 << 4), 117 }; 118 119 struct bridge_config { 120 enum bridge_opt flags; 121 bool stp; 122 bool stp_kernel; 123 const char *stp_proto; 124 125 bool igmp_snoop; 126 bool multicast_querier; 127 int robustness; 128 int query_interval; 129 int query_response_interval; 130 int last_member_interval; 131 132 unsigned short priority; 133 int forward_delay; 134 bool bridge_empty; 135 136 int ageing_time; 137 int hello_time; 138 int max_age; 139 int hash_max; 140 141 bool vlan_filtering; 142 }; 143 144 enum macvlan_opt { 145 MACVLAN_OPT_MACADDR = (1 << 0), 146 }; 147 148 struct macvlan_config { 149 const char *mode; 150 151 enum macvlan_opt flags; 152 unsigned char macaddr[6]; 153 }; 154 155 enum veth_opt { 156 VETH_OPT_MACADDR = (1 << 0), 157 VETH_OPT_PEER_NAME = (1 << 1), 158 VETH_OPT_PEER_MACADDR = (1 << 2), 159 }; 160 161 struct veth_config { 162 enum veth_opt flags; 163 164 unsigned char macaddr[6]; 165 char peer_name[IFNAMSIZ]; 166 unsigned char peer_macaddr[6]; 167 }; 168 169 enum vlan_proto { 170 VLAN_PROTO_8021Q = 0x8100, 171 VLAN_PROTO_8021AD = 0x88A8 172 }; 173 174 struct vlan_qos_mapping { 175 struct vlist_simple_node node; /* entry in vlandev_config->{e,in}gress_qos_mapping_list */ 176 uint32_t from; 177 uint32_t to; 178 }; 179 180 struct vlandev_config { 181 enum vlan_proto proto; 182 uint16_t vid; 183 struct vlist_simple_tree ingress_qos_mapping_list; /* list of struct vlan_qos_mapping */ 184 struct vlist_simple_tree egress_qos_mapping_list; /* list of struct vlan_qos_mapping */ 185 }; 186 187 enum bonding_mode { 188 BONDING_MODE_BALANCE_RR, 189 BONDING_MODE_ACTIVE_BACKUP, 190 BONDING_MODE_BALANCE_XOR, 191 BONDING_MODE_BROADCAST, 192 BONDING_MODE_8023AD, 193 BONDING_MODE_BALANCE_TLB, 194 BONDING_MODE_BALANCE_ALB, 195 __BONDING_MODE_MAX, 196 }; 197 198 struct bonding_config { 199 enum bonding_mode policy; 200 const char *xmit_hash_policy; 201 bool all_ports_active; 202 int min_links; 203 const char *ad_actor_system; 204 int ad_actor_sys_prio; 205 const char *ad_select; 206 const char *lacp_rate; 207 int packets_per_port; 208 int lp_interval; 209 bool dynamic_lb; 210 int resend_igmp; 211 int num_peer_notif; 212 const char *primary; 213 const char *primary_reselect; 214 const char *failover_mac; 215 bool monitor_arp; 216 int monitor_interval; 217 struct blob_attr *arp_target; 218 bool arp_all_targets; 219 const char *arp_validate; 220 bool use_carrier; 221 int updelay; 222 int downdelay; 223 }; 224 225 static inline int system_get_addr_family(unsigned int flags) 226 { 227 if ((flags & DEVADDR_FAMILY) == DEVADDR_INET6) 228 return AF_INET6; 229 else 230 return AF_INET; 231 } 232 233 static inline int system_get_addr_len(unsigned int flags) 234 { 235 if ((flags & DEVADDR_FAMILY) != DEVADDR_INET6) 236 return sizeof(struct in_addr); 237 else 238 return sizeof(struct in6_addr); 239 } 240 241 extern const char * const bonding_policy_str[__BONDING_MODE_MAX]; 242 243 int system_init(void); 244 245 int system_bridge_addbr(struct device *bridge, struct bridge_config *cfg); 246 int system_bridge_delbr(struct device *bridge); 247 int system_bridge_addif(struct device *bridge, struct device *dev); 248 int system_bridge_delif(struct device *bridge, struct device *dev); 249 int system_bridge_vlan(const char *iface, uint16_t vid, int16_t vid_end, bool add, unsigned int vflags); 250 int system_bridge_vlan_check(struct device *dev, char *ifname); 251 void system_bridge_set_stp_state(struct device *dev, bool val); 252 253 int system_bonding_set_device(struct device *dev, struct bonding_config *cfg); 254 int system_bonding_set_port(struct device *dev, struct device *port, bool add, bool primary); 255 256 int system_macvlan_add(struct device *macvlan, struct device *dev, struct macvlan_config *cfg); 257 int system_macvlan_del(struct device *macvlan); 258 259 int system_veth_add(struct device *veth, struct veth_config *cfg); 260 int system_veth_del(struct device *veth); 261 262 int system_vlan_add(struct device *dev, int id); 263 int system_vlan_del(struct device *dev); 264 265 int system_vlandev_add(struct device *vlandev, struct device *dev, struct vlandev_config *cfg); 266 int system_vlandev_del(struct device *vlandev); 267 268 void system_if_get_settings(struct device *dev, struct device_settings *s); 269 void system_if_clear_state(struct device *dev); 270 int system_if_up(struct device *dev); 271 int system_if_down(struct device *dev); 272 int system_if_check(struct device *dev); 273 int system_if_resolve(struct device *dev); 274 275 int system_if_dump_info(struct device *dev, struct blob_buf *b); 276 int system_if_dump_stats(struct device *dev, struct blob_buf *b); 277 struct device *system_if_get_parent(struct device *dev); 278 bool system_if_force_external(const char *ifname); 279 void system_if_apply_settings(struct device *dev, struct device_settings *s, 280 uint64_t apply_mask); 281 void system_if_apply_settings_after_up(struct device *dev, struct device_settings *s); 282 283 int system_add_address(struct device *dev, struct device_addr *addr); 284 int system_del_address(struct device *dev, struct device_addr *addr); 285 286 int system_add_route(struct device *dev, struct device_route *route); 287 int system_del_route(struct device *dev, struct device_route *route); 288 int system_flush_routes(void); 289 290 int system_add_neighbor(struct device *dev, struct device_neighbor * neighbor); 291 int system_del_neighbor(struct device *dev, struct device_neighbor * neighbor); 292 293 bool system_resolve_rt_type(const char *type, unsigned int *id); 294 bool system_resolve_rt_proto(const char *type, unsigned int *id); 295 bool system_resolve_rt_table(const char *name, unsigned int *id); 296 bool system_is_default_rt_table(unsigned int id); 297 bool system_resolve_rpfilter(const char *filter, unsigned int *id); 298 299 int system_del_ip_tunnel(const struct device *dev); 300 int system_add_ip_tunnel(const struct device *dev, struct blob_attr *attr); 301 302 int system_add_iprule(struct iprule *rule); 303 int system_del_iprule(struct iprule *rule); 304 int system_flush_iprules(void); 305 306 bool system_resolve_iprule_action(const char *action, unsigned int *id); 307 308 time_t system_get_rtime(void); 309 310 void system_fd_set_cloexec(int fd); 311 312 int system_update_ipv6_mtu(struct device *dev, int mtu); 313 314 int system_link_netns_move(struct device *dev, const pid_t target_ns, const char *target_ifname); 315 int system_netns_open(const pid_t target_ns); 316 int system_netns_set(int netns_fd); 317 318 #endif 319
This page was automatically generated by LXR 0.3.1. • OpenWrt