1 /* 2 * Copyright (c) 2004-2021 Apple Inc. All rights reserved. 3 * 4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. The rights granted to you under the License 10 * may not be used to create, or enable the creation or redistribution of, 11 * unlawful or unlicensed copies of an Apple operating system, or to 12 * circumvent, violate, or enable the circumvention or violation of, any 13 * terms of an Apple operating system software license agreement. 14 * 15 * Please obtain a copy of the License at 16 * http://www.opensource.apple.com/apsl/ and read it before using this file. 17 * 18 * The Original Code and all software distributed under the License are 19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 23 * Please see the License for the specific language governing rights and 24 * limitations under the License. 25 * 26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 27 */ 28 29 /* 30 * Copyright 2001 Wasabi Systems, Inc. 31 * All rights reserved. 32 * 33 * Written by Jason R. Thorpe for Wasabi Systems, Inc. 34 * 35 * Redistribution and use in source and binary forms, with or without 36 * modification, are permitted provided that the following conditions 37 * are met: 38 * 1. Redistributions of source code must retain the above copyright 39 * notice, this list of conditions and the following disclaimer. 40 * 2. Redistributions in binary form must reproduce the above copyright 41 * notice, this list of conditions and the following disclaimer in the 42 * documentation and/or other materials provided with the distribution. 43 * 3. All advertising materials mentioning features or use of this software 44 * must display the following acknowledgement: 45 * This product includes software developed for the NetBSD Project by 46 * Wasabi Systems, Inc. 47 * 4. The name of Wasabi Systems, Inc. may not be used to endorse 48 * or promote products derived from this software without specific prior 49 * written permission. 50 * 51 * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND 52 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 53 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 54 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC 55 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 56 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 57 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 58 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 59 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 60 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 61 * POSSIBILITY OF SUCH DAMAGE. 62 */ 63 64 /* 65 * Copyright (c) 1999, 2000 Jason L. Wright ([email protected]) 66 * All rights reserved. 67 * 68 * Redistribution and use in source and binary forms, with or without 69 * modification, are permitted provided that the following conditions 70 * are met: 71 * 1. Redistributions of source code must retain the above copyright 72 * notice, this list of conditions and the following disclaimer. 73 * 2. Redistributions in binary form must reproduce the above copyright 74 * notice, this list of conditions and the following disclaimer in the 75 * documentation and/or other materials provided with the distribution. 76 * 3. All advertising materials mentioning features or use of this software 77 * must display the following acknowledgement: 78 * This product includes software developed by Jason L. Wright 79 * 4. The name of the author may not be used to endorse or promote products 80 * derived from this software without specific prior written permission. 81 * 82 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 83 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 84 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 85 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 86 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 87 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 88 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 89 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 90 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 91 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 92 * POSSIBILITY OF SUCH DAMAGE. 93 * 94 * OpenBSD: if_bridge.h,v 1.14 2001/03/22 03:48:29 jason Exp 95 * 96 * $FreeBSD$ 97 */ 98 99 /* 100 * Data structure and control definitions for bridge interfaces. 101 */ 102 103 #ifndef _NET_IF_BRIDGEVAR_H_ 104 #define _NET_IF_BRIDGEVAR_H_ 105 106 #ifdef PRIVATE 107 108 #include <sys/queue.h> 109 110 #include <net/if.h> 111 #include <net/ethernet.h> 112 #include <netinet/in.h> 113 114 /* 115 * Commands used in the SIOCSDRVSPEC ioctl. Note the lookup of the 116 * bridge interface itself is keyed off the ifdrv structure. 117 */ 118 #define BRDGADD 0 /* add bridge member (ifbreq) */ 119 #define BRDGDEL 1 /* delete bridge member (ifbreq) */ 120 #define BRDGGIFFLGS 2 /* get member if flags (ifbreq) */ 121 #define BRDGSIFFLGS 3 /* set member if flags (ifbreq) */ 122 #define BRDGSCACHE 4 /* set cache size (ifbrparam) */ 123 #define BRDGGCACHE 5 /* get cache size (ifbrparam) */ 124 #define BRDGGIFS 6 /* get member list (ifbifconf) */ 125 #define BRDGRTS 7 /* get address list (ifbaconf) */ 126 #define BRDGSADDR 8 /* set static address (ifbareq) */ 127 #define BRDGSTO 9 /* set cache timeout (ifbrparam) */ 128 #define BRDGGTO 10 /* get cache timeout (ifbrparam) */ 129 #define BRDGDADDR 11 /* delete address (ifbareq) */ 130 #define BRDGFLUSH 12 /* flush address cache (ifbreq) */ 131 132 #define BRDGGPRI 13 /* get priority (ifbrparam) */ 133 #define BRDGSPRI 14 /* set priority (ifbrparam) */ 134 #define BRDGGHT 15 /* get hello time (ifbrparam) */ 135 #define BRDGSHT 16 /* set hello time (ifbrparam) */ 136 #define BRDGGFD 17 /* get forward delay (ifbrparam) */ 137 #define BRDGSFD 18 /* set forward delay (ifbrparam) */ 138 #define BRDGGMA 19 /* get max age (ifbrparam) */ 139 #define BRDGSMA 20 /* set max age (ifbrparam) */ 140 #define BRDGSIFPRIO 21 /* set if priority (ifbreq) */ 141 #define BRDGSIFCOST 22 /* set if path cost (ifbreq) */ 142 #define BRDGGFILT 23 /* get filter flags (ifbrparam) */ 143 #define BRDGSFILT 24 /* set filter flags (ifbrparam) */ 144 #define BRDGPURGE 25 /* purge address cache for a particular interface (ifbreq) */ 145 #define BRDGADDS 26 /* add bridge span member (ifbreq) */ 146 #define BRDGDELS 27 /* delete bridge span member (ifbreq) */ 147 #define BRDGPARAM 28 /* get bridge STP params (ifbropreq) */ 148 #define BRDGGRTE 29 /* get cache drops (ifbrparam) */ 149 #define BRDGGIFSSTP 30 /* get member STP params list (ifbpstpconf) */ 150 #define BRDGSPROTO 31 /* set protocol (ifbrparam) */ 151 #define BRDGSTXHC 32 /* set tx hold count (ifbrparam) */ 152 #define BRDGSIFAMAX 33 /* set max interface addrs (ifbreq) */ 153 #define BRDGGHOSTFILTER 34 /* get host filter (ifbrhostfilter) */ 154 #define BRDGSHOSTFILTER 35 /* set host filter (ifbrhostfilter) */ 155 #define BRDGGMACNATLIST 36 /* get MAC NAT list (ifbrmnelist) */ 156 #define BRDGGIFSTATS 37 /* member stats (ifbrmreq+ifbrmstats) */ 157 158 /* 159 * Generic bridge control request. 160 */ 161 #pragma pack(4) 162 163 struct ifbreq { 164 char ifbr_ifsname[IFNAMSIZ]; /* member if name */ 165 uint32_t ifbr_ifsflags; /* member if flags */ 166 uint32_t ifbr_stpflags; /* member if STP flags */ 167 uint32_t ifbr_path_cost; /* member if STP cost */ 168 uint8_t ifbr_portno; /* member if port number */ 169 uint8_t ifbr_priority; /* member if STP priority */ 170 uint8_t ifbr_proto; /* member if STP protocol */ 171 uint8_t ifbr_role; /* member if STP role */ 172 uint8_t ifbr_state; /* member if STP state */ 173 uint32_t ifbr_addrcnt; /* member if addr number */ 174 uint32_t ifbr_addrmax; /* member if addr max */ 175 uint32_t ifbr_addrexceeded; /* member if addr violations */ 176 uint8_t pad[32]; 177 }; 178 179 #pragma pack() 180 181 /* BRDGGIFFLGS, BRDGSIFFLGS */ 182 #define IFBIF_LEARNING 0x0001 /* if can learn */ 183 #define IFBIF_DISCOVER 0x0002 /* if sends packets w/ unknown dest. */ 184 #define IFBIF_STP 0x0004 /* if participates in spanning tree */ 185 #define IFBIF_SPAN 0x0008 /* if is a span port */ 186 #define IFBIF_STICKY 0x0010 /* if learned addresses stick */ 187 #define IFBIF_BSTP_EDGE 0x0020 /* member stp edge port */ 188 #define IFBIF_BSTP_AUTOEDGE 0x0040 /* member stp autoedge enabled */ 189 #define IFBIF_BSTP_PTP 0x0080 /* member stp point to point */ 190 #define IFBIF_BSTP_AUTOPTP 0x0100 /* member stp autoptp enabled */ 191 #define IFBIF_BSTP_ADMEDGE 0x0200 /* member stp admin edge enabled */ 192 #define IFBIF_BSTP_ADMCOST 0x0400 /* member stp admin path cost */ 193 #define IFBIF_PRIVATE 0x0800 /* if is a private segment */ 194 #define IFBIF_MAC_NAT 0x8000 /* member requires MAC NAT */ 195 #define IFBIF_CHECKSUM_OFFLOAD 0x10000 /* checksum inbound packets, 196 * drop outbound packets with 197 * bad checksum 198 */ 199 200 #define IFBIFBITS "\020\001LEARNING\002DISCOVER\003STP\004SPAN" \ 201 "\005STICKY\006EDGE\007AUTOEDGE\010PTP" \ 202 "\011AUTOPTP\014PRIVATE" \ 203 "\020MACNAT\021CSUM" 204 205 #define IFBIFMASK ~(IFBIF_BSTP_EDGE|IFBIF_BSTP_AUTOEDGE|IFBIF_BSTP_PTP| \ 206 IFBIF_BSTP_AUTOPTP|IFBIF_BSTP_ADMEDGE| \ 207 IFBIF_BSTP_ADMCOST) /* not saved */ 208 209 /* BRDGFLUSH */ 210 #define IFBF_FLUSHDYN 0x00 /* flush learned addresses only */ 211 #define IFBF_FLUSHALL 0x01 /* flush all addresses */ 212 213 /* BRDGSFILT */ 214 #define IFBF_FILT_USEIPF 0x00000001 /* run pf hooks on the bridge 215 * interface */ 216 #define IFBF_FILT_MEMBER 0x00000002 /* run pf hooks on the member 217 * interfaces */ 218 #define IFBF_FILT_ONLYIP 0x00000004 /* only pass IP[46] packets when 219 * pf is enabled */ 220 #define IFBF_FILT_MASK 0x00000007 /* mask of valid values */ 221 222 /* 223 * Interface list structure. 224 */ 225 226 #pragma pack(4) 227 228 #ifndef XNU_KERNEL_PRIVATE 229 230 struct ifbifconf { 231 uint32_t ifbic_len; /* buffer size */ 232 union { 233 caddr_t ifbicu_buf; 234 struct ifbreq *ifbicu_req; 235 #define ifbic_buf ifbic_ifbicu.ifbicu_buf 236 #define ifbic_req ifbic_ifbicu.ifbicu_req 237 } ifbic_ifbicu; 238 }; 239 240 #else /* XNU_KERNEL_PRIVATE */ 241 242 struct ifbifconf32 { 243 uint32_t ifbic_len; /* buffer size */ 244 union { 245 user32_addr_t ifbicu_buf; 246 user32_addr_t ifbicu_req; 247 #define ifbic_buf ifbic_ifbicu.ifbicu_buf 248 #define ifbic_req ifbic_ifbicu.ifbicu_req 249 } ifbic_ifbicu; 250 }; 251 252 struct ifbifconf64 { 253 uint32_t ifbic_len; /* buffer size */ 254 union { 255 user64_addr_t ifbicu_buf; 256 user64_addr_t ifbicu_req; 257 } ifbic_ifbicu; 258 }; 259 #endif /* XNU_KERNEL_PRIVATE */ 260 261 #pragma pack() 262 263 /* 264 * Bridge address request. 265 */ 266 267 #pragma pack(4) 268 269 #ifndef XNU_KERNEL_PRIVATE 270 271 struct ifbareq { 272 char ifba_ifsname[IFNAMSIZ]; /* member if name */ 273 unsigned long ifba_expire; /* address expire time */ 274 uint8_t ifba_flags; /* address flags */ 275 uint8_t ifba_dst[ETHER_ADDR_LEN];/* destination address */ 276 uint16_t ifba_vlan; /* vlan id */ 277 }; 278 279 #else /* XNU_KERNEL_PRIVATE */ 280 281 struct ifbareq32 { 282 char ifba_ifsname[IFNAMSIZ]; /* member if name */ 283 uint32_t ifba_expire; /* address expire time */ 284 uint8_t ifba_flags; /* address flags */ 285 uint8_t ifba_dst[ETHER_ADDR_LEN];/* destination address */ 286 uint16_t ifba_vlan; /* vlan id */ 287 }; 288 289 struct ifbareq64 { 290 char ifba_ifsname[IFNAMSIZ]; /* member if name */ 291 uint64_t ifba_expire; /* address expire time */ 292 uint8_t ifba_flags; /* address flags */ 293 uint8_t ifba_dst[ETHER_ADDR_LEN];/* destination address */ 294 uint16_t ifba_vlan; /* vlan id */ 295 }; 296 #endif /* XNU_KERNEL_PRIVATE */ 297 298 #pragma pack() 299 300 #define IFBAF_TYPEMASK 0x03 /* address type mask */ 301 #define IFBAF_DYNAMIC 0x00 /* dynamically learned address */ 302 #define IFBAF_STATIC 0x01 /* static address */ 303 #define IFBAF_STICKY 0x02 /* sticky address */ 304 305 #define IFBAFBITS "\020\1STATIC\2STICKY" 306 307 /* 308 * Address list structure. 309 */ 310 311 #pragma pack(4) 312 313 #ifndef XNU_KERNEL_PRIVATE 314 315 struct ifbaconf { 316 uint32_t ifbac_len; /* buffer size */ 317 union { 318 caddr_t ifbacu_buf; 319 struct ifbareq *ifbacu_req; 320 #define ifbac_buf ifbac_ifbacu.ifbacu_buf 321 #define ifbac_req ifbac_ifbacu.ifbacu_req 322 } ifbac_ifbacu; 323 }; 324 325 #else /* XNU_KERNEL_PRIVATE */ 326 327 struct ifbaconf32 { 328 uint32_t ifbac_len; /* buffer size */ 329 union { 330 user32_addr_t ifbacu_buf; 331 user32_addr_t ifbacu_req; 332 #define ifbac_buf ifbac_ifbacu.ifbacu_buf 333 #define ifbac_req ifbac_ifbacu.ifbacu_req 334 } ifbac_ifbacu; 335 }; 336 337 struct ifbaconf64 { 338 uint32_t ifbac_len; /* buffer size */ 339 union { 340 user64_addr_t ifbacu_buf; 341 user64_addr_t ifbacu_req; 342 } ifbac_ifbacu; 343 }; 344 #endif /* XNU_KERNEL_PRIVATE */ 345 346 #pragma pack() 347 348 /* 349 * Bridge parameter structure. 350 */ 351 352 #pragma pack(4) 353 354 struct ifbrparam { 355 union { 356 uint32_t ifbrpu_int32; 357 uint16_t ifbrpu_int16; 358 uint8_t ifbrpu_int8; 359 } ifbrp_ifbrpu; 360 }; 361 362 #pragma pack() 363 364 #define ifbrp_csize ifbrp_ifbrpu.ifbrpu_int32 /* cache size */ 365 #define ifbrp_ctime ifbrp_ifbrpu.ifbrpu_int32 /* cache time (sec) */ 366 #define ifbrp_prio ifbrp_ifbrpu.ifbrpu_int16 /* bridge priority */ 367 #define ifbrp_proto ifbrp_ifbrpu.ifbrpu_int8 /* bridge protocol */ 368 #define ifbrp_txhc ifbrp_ifbrpu.ifbrpu_int8 /* bpdu tx holdcount */ 369 #define ifbrp_hellotime ifbrp_ifbrpu.ifbrpu_int8 /* hello time (sec) */ 370 #define ifbrp_fwddelay ifbrp_ifbrpu.ifbrpu_int8 /* fwd time (sec) */ 371 #define ifbrp_maxage ifbrp_ifbrpu.ifbrpu_int8 /* max age (sec) */ 372 #define ifbrp_cexceeded ifbrp_ifbrpu.ifbrpu_int32 /* # of cache dropped 373 * adresses */ 374 #define ifbrp_filter ifbrp_ifbrpu.ifbrpu_int32 /* filtering flags */ 375 376 /* 377 * Bridge current operational parameters structure. 378 */ 379 380 #ifndef XNU_KERNEL_PRIVATE 381 382 #pragma pack(4) 383 384 struct ifbropreq { 385 uint8_t ifbop_holdcount; 386 uint8_t ifbop_maxage; 387 uint8_t ifbop_hellotime; 388 uint8_t ifbop_fwddelay; 389 uint8_t ifbop_protocol; 390 uint16_t ifbop_priority; 391 uint16_t ifbop_root_port; 392 uint32_t ifbop_root_path_cost; 393 uint64_t ifbop_bridgeid; 394 uint64_t ifbop_designated_root; 395 uint64_t ifbop_designated_bridge; 396 struct timeval ifbop_last_tc_time; 397 }; 398 399 #pragma pack() 400 401 #else /* XNU_KERNEL_PRIVATE */ 402 403 #include <sys/_types/_timeval32.h> 404 #include <sys/_types/_timeval64.h> 405 406 #pragma pack(4) 407 408 struct ifbropreq32 { 409 uint8_t ifbop_holdcount; 410 uint8_t ifbop_maxage; 411 uint8_t ifbop_hellotime; 412 uint8_t ifbop_fwddelay; 413 uint8_t ifbop_protocol; 414 uint16_t ifbop_priority; 415 uint16_t ifbop_root_port; 416 uint32_t ifbop_root_path_cost; 417 uint64_t ifbop_bridgeid; 418 uint64_t ifbop_designated_root; 419 uint64_t ifbop_designated_bridge; 420 struct timeval32 ifbop_last_tc_time; 421 }; 422 423 struct ifbropreq64 { 424 uint8_t ifbop_holdcount; 425 uint8_t ifbop_maxage; 426 uint8_t ifbop_hellotime; 427 uint8_t ifbop_fwddelay; 428 uint8_t ifbop_protocol; 429 uint16_t ifbop_priority; 430 uint16_t ifbop_root_port; 431 uint32_t ifbop_root_path_cost; 432 uint64_t ifbop_bridgeid; 433 uint64_t ifbop_designated_root; 434 uint64_t ifbop_designated_bridge; 435 struct timeval64 ifbop_last_tc_time; 436 }; 437 438 #pragma pack() 439 440 #endif 441 442 /* 443 * Bridge member operational STP params structure. 444 */ 445 446 #pragma pack(4) 447 448 struct ifbpstpreq { 449 uint8_t ifbp_portno; /* bp STP port number */ 450 uint32_t ifbp_fwd_trans; /* bp STP fwd transitions */ 451 uint32_t ifbp_design_cost; /* bp STP designated cost */ 452 uint32_t ifbp_design_port; /* bp STP designated port */ 453 uint64_t ifbp_design_bridge; /* bp STP designated bridge */ 454 uint64_t ifbp_design_root; /* bp STP designated root */ 455 }; 456 457 #pragma pack() 458 459 /* 460 * Bridge STP ports list structure. 461 */ 462 463 #pragma pack(4) 464 465 #ifndef XNU_KERNEL_PRIVATE 466 467 struct ifbpstpconf { 468 uint32_t ifbpstp_len; /* buffer size */ 469 union { 470 caddr_t ifbpstpu_buf; 471 struct ifbpstpreq *ifbpstpu_req; 472 } ifbpstp_ifbpstpu; 473 #define ifbpstp_buf ifbpstp_ifbpstpu.ifbpstpu_buf 474 #define ifbpstp_req ifbpstp_ifbpstpu.ifbpstpu_req 475 }; 476 477 #else /* XNU_KERNEL_PRIVATE */ 478 479 struct ifbpstpconf32 { 480 uint32_t ifbpstp_len; /* buffer size */ 481 union { 482 user32_addr_t ifbpstpu_buf; 483 user32_addr_t ifbpstpu_req; 484 #define ifbpstp_buf ifbpstp_ifbpstpu.ifbpstpu_buf 485 #define ifbpstp_req ifbpstp_ifbpstpu.ifbpstpu_req 486 } ifbpstp_ifbpstpu; 487 }; 488 489 struct ifbpstpconf64 { 490 uint32_t ifbpstp_len; /* buffer size */ 491 union { 492 user64_addr_t ifbpstpu_buf; 493 user64_addr_t ifbpstpu_req; 494 } ifbpstp_ifbpstpu; 495 }; 496 497 #endif /* XNU_KERNEL_PRIVATE */ 498 499 #pragma pack() 500 501 /* 502 * Bridge member host filter. 503 */ 504 505 #define IFBRHF_ENABLED 0x01 506 #define IFBRHF_HWSRC 0x02 /* Valid with enabled flags */ 507 #define IFBRHF_IPSRC 0x04 /* Valid with enabled flags */ 508 509 #pragma pack(4) 510 511 struct ifbrhostfilter { 512 uint32_t ifbrhf_flags; /* flags */ 513 char ifbrhf_ifsname[IFNAMSIZ]; /* member if name */ 514 uint8_t ifbrhf_hwsrca[ETHER_ADDR_LEN]; 515 uint32_t ifbrhf_ipsrc; 516 }; 517 518 #pragma pack() 519 520 /* 521 * sysctl net.link.bridge.hostfilterstats 522 */ 523 struct bridge_hostfilter_stats { 524 uint64_t brhf_bad_ether_type; 525 uint64_t brhf_bad_ether_srchw_addr; 526 527 uint64_t brhf_ether_too_small; 528 uint64_t brhf_ether_pullup_failed; 529 530 uint64_t brhf_arp_ok; 531 uint64_t brhf_arp_too_small; 532 uint64_t brhf_arp_pullup_failed; 533 uint64_t brhf_arp_bad_hw_type; 534 uint64_t brhf_arp_bad_pro_type; 535 uint64_t brhf_arp_bad_hw_len; 536 uint64_t brhf_arp_bad_pro_len; 537 uint64_t brhf_arp_bad_op; 538 uint64_t brhf_arp_bad_sha; 539 uint64_t brhf_arp_bad_spa; 540 541 uint64_t brhf_ip_ok; 542 uint64_t brhf_ip_too_small; 543 uint64_t brhf_ip_pullup_failed; 544 uint64_t brhf_ip_bad_srcaddr; 545 uint64_t brhf_ip_bad_proto; 546 547 uint64_t brhf_dhcp_too_small; 548 uint64_t brhf_dhcp_bad_op; 549 uint64_t brhf_dhcp_bad_htype; 550 uint64_t brhf_dhcp_bad_hlen; 551 uint64_t brhf_dhcp_bad_chaddr; 552 uint64_t brhf_dhcp_bad_ciaddr; 553 }; 554 555 #ifdef XNU_KERNEL_PRIVATE 556 557 extern u_int8_t bstp_etheraddr[ETHER_ADDR_LEN]; 558 559 int bridgeattach(int); 560 561 #endif /* XNU_KERNEL_PRIVATE */ 562 563 564 #pragma pack(4) 565 566 /* 567 * MAC NAT entry list 568 */ 569 570 union ifbrip { 571 struct in_addr ifbrip_addr; 572 struct in6_addr ifbrip_addr6; 573 }; 574 575 struct ifbrmne { 576 char ifbmne_ifname[IFNAMSIZ]; /* member if name */ 577 uint64_t ifbmne_expire; /* expiration time */ 578 uint8_t ifbmne_mac[ETHER_ADDR_LEN];/* MAC address */ 579 uint8_t ifbmne_reserved; 580 uint8_t ifbmne_af; /* AF_INET or AF_INET6 */ 581 union ifbrip ifbmne_ip; 582 }; 583 #define ifbmne_ip_addr ifbmne_ip.ifbrip_addr 584 #define ifbmne_ip6_addr ifbmne_ip.ifbrip_addr6 585 586 #ifndef XNU_KERNEL_PRIVATE 587 588 struct ifbrmnelist { 589 uint32_t ifbml_len; /* buffer size (multiple of elsize) */ 590 uint16_t ifbml_elsize; /* sizeof(ifbrmne) */ 591 uint16_t ifbml_pad; 592 caddr_t ifbml_buf; 593 }; 594 595 #else /* XNU_KERNEL_PRIVATE */ 596 597 struct ifbrmnelist32 { 598 uint32_t ifbml_len; /* buffer size */ 599 uint16_t ifbml_elsize; /* sizeof(ifbrmne) */ 600 uint16_t ifbml_pad; 601 user32_addr_t ifbml_buf; 602 }; 603 604 struct ifbrmnelist64 { 605 uint32_t ifbml_len; /* buffer size */ 606 uint16_t ifbml_elsize; /* sizeof(ifbrmne) */ 607 uint16_t ifbml_pad; 608 user64_addr_t ifbml_buf; 609 }; 610 611 #endif /* XNU_KERNEL_PRIVATE */ 612 613 614 /* 615 * Bridge member-specific request structure 616 */ 617 618 #ifndef XNU_KERNEL_PRIVATE 619 620 struct ifbrmreq { 621 char brmr_ifname[IFNAMSIZ]; /* member if name */ 622 uint32_t brmr_len; /* buffer size (in/out) */ 623 uint32_t brmr_elsize; /* element size (out) */ 624 caddr_t brmr_buf; /* buffer */ 625 }; 626 627 #else /* XNU_KERNEL_PRIVATE */ 628 629 struct ifbrmreq32 { 630 char brmr_ifname[IFNAMSIZ]; /* member if name */ 631 uint32_t brmr_len; /* buffer size (in/out) */ 632 uint32_t brmr_elsize; /* element size (out) */ 633 user32_addr_t brmr_buf; /* buffer */ 634 }; 635 636 struct ifbrmreq64 { 637 char brmr_ifname[IFNAMSIZ]; /* member if name */ 638 uint32_t brmr_len; /* buffer size (in/out) */ 639 uint32_t brmr_elsize; /* element size (out) */ 640 user64_addr_t brmr_buf; /* buffer */ 641 }; 642 643 #endif /* XNU_KERNEL_PRIVATE */ 644 645 struct bripstats { 646 uint64_t bips_ip; 647 uint64_t bips_ip6; 648 uint64_t bips_udp; 649 uint64_t bips_tcp; 650 651 uint64_t bips_bad_ip; 652 uint64_t bips_bad_ip6; 653 uint64_t bips_bad_udp; 654 uint64_t bips_bad_tcp; 655 }; 656 657 struct brcsumstats { 658 uint64_t brcs_ip_checksum; 659 uint64_t brcs_udp_checksum; 660 uint64_t brcs_tcp_checksum; 661 }; 662 663 /* 664 * Bridge member statistics 665 * - "in" and "out" are from the perspective of the bridge: 666 * in: packets received from the bridge member 667 * out: packets destined to the bridge member 668 * - only available when IFBIF_CHECKSUM_OFFLOAD is enabled on the 669 * interface 670 */ 671 struct ifbrmstats { 672 struct bripstats brms_in_ip; 673 struct bripstats brms_out_ip; 674 675 struct brcsumstats brms_in_computed_cksum; 676 677 struct brcsumstats brms_out_cksum_good; 678 struct brcsumstats brms_out_cksum_good_hw; 679 680 struct brcsumstats brms_out_cksum_bad; 681 struct brcsumstats brms_out_cksum_bad_hw; 682 }; 683 684 #pragma pack() 685 686 #endif /* PRIVATE */ 687 #endif /* !_NET_IF_BRIDGEVAR_H_ */ 688