@zigc/lib 0.17.0-dev.329 → 0.17.0-dev.340

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/libc/include/aarch64-openbsd-none/arm64/cpu.h +7 -1
  2. package/libc/include/aarch64-openbsd-none/arm64/intr.h +9 -1
  3. package/libc/include/aarch64-openbsd-none/machine/cpu.h +7 -1
  4. package/libc/include/aarch64-openbsd-none/machine/intr.h +9 -1
  5. package/libc/include/generic-openbsd/db.h +1 -7
  6. package/libc/include/generic-openbsd/ddb/db_interface.h +2 -1
  7. package/libc/include/generic-openbsd/fnmatch.h +6 -2
  8. package/libc/include/generic-openbsd/login_cap.h +3 -1
  9. package/libc/include/generic-openbsd/miscfs/fuse/fusefs_node.h +2 -1
  10. package/libc/include/generic-openbsd/net/bpf.h +3 -1
  11. package/libc/include/generic-openbsd/net/hfsc.h +4 -4
  12. package/libc/include/generic-openbsd/net/if.h +5 -1
  13. package/libc/include/generic-openbsd/net/if_bridge.h +48 -1
  14. package/libc/include/generic-openbsd/net/if_etherbridge.h +20 -7
  15. package/libc/include/generic-openbsd/net/if_media.h +26 -1
  16. package/libc/include/generic-openbsd/net/if_pflow.h +71 -20
  17. package/libc/include/generic-openbsd/net/if_pfsync.h +2 -2
  18. package/libc/include/generic-openbsd/net/if_sppp.h +2 -1
  19. package/libc/include/generic-openbsd/net/if_trunk.h +3 -2
  20. package/libc/include/generic-openbsd/net/if_types.h +2 -2
  21. package/libc/include/generic-openbsd/net/if_var.h +34 -12
  22. package/libc/include/generic-openbsd/net/netisr.h +1 -3
  23. package/libc/include/generic-openbsd/net/pfvar.h +154 -1
  24. package/libc/include/generic-openbsd/net/pfvar_priv.h +256 -1
  25. package/libc/include/generic-openbsd/net80211/ieee80211.h +76 -4
  26. package/libc/include/generic-openbsd/net80211/ieee80211_ioctl.h +3 -2
  27. package/libc/include/generic-openbsd/net80211/ieee80211_node.h +48 -2
  28. package/libc/include/generic-openbsd/net80211/ieee80211_proto.h +4 -1
  29. package/libc/include/generic-openbsd/net80211/ieee80211_var.h +18 -2
  30. package/libc/include/generic-openbsd/netinet/if_ether.h +12 -11
  31. package/libc/include/generic-openbsd/netinet/igmp_var.h +17 -3
  32. package/libc/include/generic-openbsd/netinet/in_pcb.h +2 -1
  33. package/libc/include/generic-openbsd/netinet/in_var.h +17 -59
  34. package/libc/include/generic-openbsd/netinet/ip.h +3 -2
  35. package/libc/include/generic-openbsd/netinet/tcp_timer.h +1 -2
  36. package/libc/include/generic-openbsd/netinet6/in6_var.h +15 -29
  37. package/libc/include/generic-openbsd/netinet6/ip6_var.h +1 -2
  38. package/libc/include/generic-openbsd/netinet6/mld6_var.h +17 -4
  39. package/libc/include/generic-openbsd/netinet6/nd6.h +2 -2
  40. package/libc/include/generic-openbsd/pthread.h +2 -2
  41. package/libc/include/generic-openbsd/signal.h +2 -2
  42. package/libc/include/generic-openbsd/sndio.h +6 -12
  43. package/libc/include/generic-openbsd/strings.h +5 -1
  44. package/libc/include/generic-openbsd/sys/device.h +4 -3
  45. package/libc/include/generic-openbsd/sys/disklabel.h +17 -5
  46. package/libc/include/generic-openbsd/sys/dkio.h +3 -5
  47. package/libc/include/generic-openbsd/sys/filedesc.h +3 -2
  48. package/libc/include/generic-openbsd/sys/mbuf.h +1 -1
  49. package/libc/include/generic-openbsd/sys/mman.h +7 -2
  50. package/libc/include/generic-openbsd/sys/mutex.h +10 -7
  51. package/libc/include/generic-openbsd/sys/namei.h +8 -7
  52. package/libc/include/generic-openbsd/sys/param.h +1 -1
  53. package/libc/include/generic-openbsd/sys/pledge.h +1 -3
  54. package/libc/include/generic-openbsd/sys/protosw.h +8 -1
  55. package/libc/include/generic-openbsd/sys/ptrace.h +4 -1
  56. package/libc/include/generic-openbsd/sys/sched.h +8 -1
  57. package/libc/include/generic-openbsd/sys/signal.h +4 -2
  58. package/libc/include/generic-openbsd/sys/socketvar.h +2 -1
  59. package/libc/include/generic-openbsd/sys/sockio.h +11 -1
  60. package/libc/include/generic-openbsd/sys/syscall.h +5 -3
  61. package/libc/include/generic-openbsd/sys/syscallargs.h +9 -2
  62. package/libc/include/generic-openbsd/sys/sysctl.h +7 -4
  63. package/libc/include/generic-openbsd/sys/types.h +6 -2
  64. package/libc/include/generic-openbsd/sys/videoio.h +143 -68
  65. package/libc/include/generic-openbsd/sys/xcall.h +2 -2
  66. package/libc/include/generic-openbsd/time.h +2 -2
  67. package/libc/include/generic-openbsd/unistd.h +2 -2
  68. package/libc/include/generic-openbsd/uvm/uvm_anon.h +2 -3
  69. package/libc/include/generic-openbsd/uvm/uvm_extern.h +1 -19
  70. package/libc/include/generic-openbsd/uvm/uvm_pager.h +3 -4
  71. package/libc/include/generic-openbsd/uvm/uvm_pmemrange.h +1 -2
  72. package/libc/include/generic-openbsd/uvm/uvm_swap.h +4 -1
  73. package/libc/include/generic-openbsd/uvm/uvm_vnode.h +3 -4
  74. package/libc/include/generic-openbsd/uvm/uvmexp.h +41 -35
  75. package/libc/include/mips64-openbsd-none/machine/octeonvar.h +1 -27
  76. package/libc/include/mips64-openbsd-none/octeon/octeonvar.h +1 -27
  77. package/libc/include/mips64el-openbsd-none/loongson/apmvar.h +1 -1
  78. package/libc/include/mips64el-openbsd-none/loongson/param.h +1 -5
  79. package/libc/include/mips64el-openbsd-none/machine/apmvar.h +1 -1
  80. package/libc/include/mips64el-openbsd-none/machine/param.h +1 -5
  81. package/libc/include/powerpc-openbsd-eabihf/powerpc/intr.h +1 -4
  82. package/libc/include/powerpc64-openbsd-none/machine/atomic.h +3 -3
  83. package/libc/include/powerpc64-openbsd-none/powerpc64/atomic.h +3 -3
  84. package/libc/include/riscv64-openbsd-none/machine/cpu.h +4 -8
  85. package/libc/include/riscv64-openbsd-none/machine/cpufunc.h +4 -4
  86. package/libc/include/riscv64-openbsd-none/machine/pmap.h +5 -1
  87. package/libc/include/riscv64-openbsd-none/machine/pte.h +9 -1
  88. package/libc/include/riscv64-openbsd-none/riscv64/cpu.h +4 -8
  89. package/libc/include/riscv64-openbsd-none/riscv64/cpufunc.h +4 -4
  90. package/libc/include/riscv64-openbsd-none/riscv64/pmap.h +5 -1
  91. package/libc/include/riscv64-openbsd-none/riscv64/pte.h +9 -1
  92. package/libc/include/x86-openbsd-none/i386/specialreg.h +3 -1
  93. package/libc/include/x86-openbsd-none/machine/specialreg.h +3 -1
  94. package/libc/include/x86_64-openbsd-none/amd64/conf.h +11 -2
  95. package/libc/include/x86_64-openbsd-none/amd64/cpu.h +14 -4
  96. package/libc/include/x86_64-openbsd-none/amd64/cpufunc.h +2 -3
  97. package/libc/include/x86_64-openbsd-none/amd64/ghcb.h +2 -1
  98. package/libc/include/x86_64-openbsd-none/amd64/i82489var.h +2 -4
  99. package/libc/include/x86_64-openbsd-none/amd64/i8259.h +1 -53
  100. package/libc/include/x86_64-openbsd-none/amd64/intr.h +5 -2
  101. package/libc/include/x86_64-openbsd-none/amd64/intrdefs.h +9 -7
  102. package/libc/include/x86_64-openbsd-none/amd64/kexec.h +48 -0
  103. package/libc/include/x86_64-openbsd-none/amd64/specialreg.h +4 -1
  104. package/libc/include/x86_64-openbsd-none/machine/conf.h +11 -2
  105. package/libc/include/x86_64-openbsd-none/machine/cpu.h +14 -4
  106. package/libc/include/x86_64-openbsd-none/machine/cpufunc.h +2 -3
  107. package/libc/include/x86_64-openbsd-none/machine/ghcb.h +2 -1
  108. package/libc/include/x86_64-openbsd-none/machine/i82489var.h +2 -4
  109. package/libc/include/x86_64-openbsd-none/machine/i8259.h +1 -53
  110. package/libc/include/x86_64-openbsd-none/machine/intr.h +5 -2
  111. package/libc/include/x86_64-openbsd-none/machine/intrdefs.h +9 -7
  112. package/libc/include/x86_64-openbsd-none/machine/kexec.h +48 -0
  113. package/libc/include/x86_64-openbsd-none/machine/specialreg.h +4 -1
  114. package/libc/openbsd/abilists +0 -0
  115. package/package.json +1 -1
  116. package/std/Io/File.zig +6 -0
  117. package/std/Target.zig +2 -7
  118. package/std/bit_set.zig +0 -1
  119. package/std/crypto/ascon.zig +0 -2
  120. package/std/crypto/salsa20.zig +0 -6
  121. package/std/crypto/sha3.zig +0 -2
  122. package/std/debug/cpu_context.zig +0 -21
  123. package/libc/include/mips64el-openbsd-none/loongson/hibernate.h +0 -33
  124. package/libc/include/mips64el-openbsd-none/loongson/hibernate_var.h +0 -39
  125. package/libc/include/mips64el-openbsd-none/machine/hibernate.h +0 -33
  126. package/libc/include/mips64el-openbsd-none/machine/hibernate_var.h +0 -39
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: ieee80211.h,v 1.64 2025/08/04 11:39:50 stsp Exp $ */
1
+ /* $OpenBSD: ieee80211.h,v 1.66 2026/03/29 21:16:21 kirill Exp $ */
2
2
  /* $NetBSD: ieee80211.h,v 1.6 2004/04/30 23:51:53 dyoung Exp $ */
3
3
 
4
4
  /*-
@@ -454,9 +454,16 @@ enum {
454
454
  IEEE80211_ELEMID_QUIET_CHNL = 198, /* 11ac */
455
455
  IEEE80211_ELEMID_OPMODE_NOTIF = 199, /* 11ac */
456
456
  /* 200-220 reserved */
457
- IEEE80211_ELEMID_VENDOR = 221 /* vendor private */
458
- /* 222-255 reserved */
457
+ IEEE80211_ELEMID_VENDOR = 221, /* vendor private */
458
+ /* 222-254 reserved */
459
+ IEEE80211_ELEMID_EXTENSION = 255 /* Extension */
459
460
  };
461
+ /*
462
+ * Extension element IDs
463
+ * Used with IEEE80211_ELEMID_EXTENSION (255)
464
+ */
465
+ #define IEEE80211_ELEMID_EXT_HECAPS 35 /* 11ax HE Capabilities */
466
+ #define IEEE80211_ELEMID_EXT_HEOP 36 /* 11ax HE Operation */
460
467
 
461
468
  /*
462
469
  * Action field category values (see 802.11-2012 8.4.1.11 Table 8-38).
@@ -518,6 +525,7 @@ enum {
518
525
 
519
526
  #define IEEE80211_HT_NUM_MCS 77
520
527
  #define IEEE80211_VHT_NUM_MCS 10
528
+ #define IEEE80211_HE_NUM_MCS 12
521
529
 
522
530
  /*
523
531
  * BlockAck/BlockAckReq Control field (see 802.11-2012 8.3.1.9 Figure 8-25).
@@ -712,7 +720,8 @@ enum {
712
720
  #define IEEE80211_HTOP1_NONGF_STA 0x0004
713
721
  /* Bit 3 is reserved. */
714
722
  #define IEEE80211_HTOP1_OBSS_NONHT_STA 0x0010
715
- /* Bits 5-15 are reserved. */
723
+ #define IEEE80211_HTOP1_CCFS2_SHIFT 5
724
+ #define IEEE80211_HTOP1_CCFS2_MASK 0x1fe0
716
725
  /* Bytes 4-5. */
717
726
  /* Bits 0-5 are reserved. */
718
727
  #define IEEE80211_HTOP2_DUALBEACON 0x0040
@@ -768,6 +777,8 @@ enum {
768
777
  #define IEEE80211_VHTCAP_LINK_ADAPT_MRQ_MFB 3
769
778
  #define IEEE80211_VHTCAP_RX_ANT_PATTERN 0x10000000
770
779
  #define IEEE80211_VHTCAP_TX_ANT_PATTERN 0x20000000
780
+ #define IEEE80211_VHTCAP_EXT_NSS_BW_SHIFT 30
781
+ #define IEEE80211_VHTCAP_EXT_NSS_BW_MASK 0xc0000000
771
782
 
772
783
  /*
773
784
  * VHT-MCS and NSS map (see 802.11ac-2013 8.4.2.160.3, Figure 8-401bs).
@@ -784,6 +795,7 @@ enum {
784
795
 
785
796
  #define IEEE80211_VHT_MAX_LGI_MBIT_S_MASK 0x1fff
786
797
  #define IEEE80211_VHT_MAX_LGI_MBIT_S_SHIFT 0
798
+ #define IEEE80211_VHT_EXT_NSS_BW_CAPABLE (1 << 13)
787
799
 
788
800
  /* The highest number of spatial streams supported by VHT. */
789
801
  #define IEEE80211_VHT_NUM_SS 8
@@ -801,6 +813,66 @@ enum {
801
813
  /* Byte 1 contains channel center frequency index 0 for 80, 80+80, 160 MHz. */
802
814
  /* Byte 2 contains channel center frequency index 1 for 80+80 MHz only. */
803
815
 
816
+
817
+ /*
818
+ * 802.11ax (HE) definitions.
819
+ */
820
+
821
+ /* HE Capabilities element fixed fields */
822
+ #define IEEE80211_HE_MAC_CAPS_LEN 6
823
+ #define IEEE80211_HE_PHY_CAPS_LEN 11
824
+ #define IEEE80211_HE_CAPS_FIXED_LEN (IEEE80211_HE_MAC_CAPS_LEN + \
825
+ IEEE80211_HE_PHY_CAPS_LEN)
826
+
827
+ /* HE Tx/Rx MCS NSS Support field size for 80 MHz */
828
+ #define IEEE80211_HE_MCS_NSS_80_LEN 4
829
+
830
+ /* Minimum length of the HE Capabilities element body (includes Ext ID) */
831
+ #define IEEE80211_HE_CAPS_MINLEN (1 + IEEE80211_HE_CAPS_FIXED_LEN + \
832
+ IEEE80211_HE_MCS_NSS_80_LEN)
833
+
834
+ /*
835
+ * Selected HE PHY capability bits (phy_cap_info[0])
836
+ * These are used to determine the presence of additional MCS/NSS maps.
837
+ */
838
+ #define IEEE80211_HE_PHYCAP0_CHAN_WIDTH_40_IN_2G 0x02
839
+ #define IEEE80211_HE_PHYCAP0_CHAN_WIDTH_40_80_IN_5G 0x04
840
+ #define IEEE80211_HE_PHYCAP0_CHAN_WIDTH_160_IN_5G 0x08
841
+ #define IEEE80211_HE_PHYCAP0_CHAN_WIDTH_8080_IN_5G 0x10
842
+
843
+ /*
844
+ * Size of the HE Tx/Rx MCS NSS Support field, in bytes, for a given
845
+ * HE PHY capabilities byte 0.
846
+ */
847
+ #define IEEE80211_HE_MCS_NSS_SIZE(_phycap0) (IEEE80211_HE_MCS_NSS_80_LEN + \
848
+ ((((_phycap0) & IEEE80211_HE_PHYCAP0_CHAN_WIDTH_160_IN_5G) ? 4 : 0)) + \
849
+ ((((_phycap0) & IEEE80211_HE_PHYCAP0_CHAN_WIDTH_8080_IN_5G) ? 4 : 0)))
850
+
851
+ /*
852
+ * HE MCS and NSS map (HE-MCS/NSS set)
853
+ *
854
+ * Set of HE MCS supported for a given number of spatial streams, `n'.
855
+ * Used by the HE capabilities IE and by the basic HE MCS set in
856
+ * the HE operation IE.
857
+ */
858
+ #define IEEE80211_HE_MCS_FOR_SS_MASK(n) (0x3 << (2 * ((n) - 1)))
859
+ #define IEEE80211_HE_MCS_FOR_SS_SHIFT(n) (2 * ((n) - 1))
860
+ #define IEEE80211_HE_MCS_0_7 0
861
+ #define IEEE80211_HE_MCS_0_9 1
862
+ #define IEEE80211_HE_MCS_0_11 2
863
+ #define IEEE80211_HE_MCS_SS_NOT_SUPP 3
864
+
865
+ /* The highest number of spatial streams supported by HE */
866
+ #define IEEE80211_HE_NUM_SS 8
867
+
868
+ /*
869
+ * HE Operation element fixed fields (not including the Ext ID byte)
870
+ */
871
+ #define IEEE80211_HEOP_PARAMS_LEN 4
872
+ #define IEEE80211_HEOP_BASIC_MCS_LEN 2
873
+ #define IEEE80211_HEOP_FIXED_LEN (IEEE80211_HEOP_PARAMS_LEN + \
874
+ IEEE80211_HEOP_BASIC_MCS_LEN)
875
+
804
876
  /*
805
877
  * EDCA Access Categories.
806
878
  */
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: ieee80211_ioctl.h,v 1.44 2025/03/22 07:24:08 kevlo Exp $ */
1
+ /* $OpenBSD: ieee80211_ioctl.h,v 1.45 2026/03/26 12:15:01 kirill Exp $ */
2
2
  /* $NetBSD: ieee80211_ioctl.h,v 1.7 2004/04/30 22:51:04 dyoung Exp $ */
3
3
 
4
4
  /*-
@@ -385,9 +385,10 @@ struct ieee80211_nodereq {
385
385
  #define IEEE80211_NODEREQ_ASSOCFAIL_BSSID 0x20
386
386
  #define IEEE80211_NODEREQ_ASSOCFAIL_WPA_PROTO 0x40
387
387
  #define IEEE80211_NODEREQ_ASSOCFAIL_WPA_KEY 0x80
388
+ #define IEEE80211_NODEREQ_ASSOCFAIL_CSA 0x100
388
389
  #define IEEE80211_NODEREQ_ASSOCFAIL_BITS \
389
390
  "\20\1!CHAN\2!IBSS\3!PRIVACY\4!BASICRATE\5!ESSID\6!BSSID\7!WPAPROTO" \
390
- "\10!WPAKEY"
391
+ "\10!WPAKEY\11!CSA"
391
392
 
392
393
  /* get the entire node cache */
393
394
  struct ieee80211_nodereq_all {
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: ieee80211_node.h,v 1.97 2025/08/01 20:39:26 stsp Exp $ */
1
+ /* $OpenBSD: ieee80211_node.h,v 1.101 2026/03/29 21:16:21 kirill Exp $ */
2
2
  /* $NetBSD: ieee80211_node.h,v 1.9 2004/04/30 22:57:32 dyoung Exp $ */
3
3
 
4
4
  /*-
@@ -370,6 +370,20 @@ struct ieee80211_node {
370
370
  uint8_t ni_vht_chan_center_freq_idx1;
371
371
  uint16_t ni_vht_basic_mcs;
372
372
 
373
+ /* HE capabilities */
374
+ uint8_t ni_he_mac_cap[IEEE80211_HE_MAC_CAPS_LEN];
375
+ uint8_t ni_he_phy_cap[IEEE80211_HE_PHY_CAPS_LEN];
376
+ uint16_t ni_he_rxmcs_80;
377
+ uint16_t ni_he_txmcs_80;
378
+ uint16_t ni_he_rxmcs_160;
379
+ uint16_t ni_he_txmcs_160;
380
+ uint16_t ni_he_rxmcs_80p80;
381
+ uint16_t ni_he_txmcs_80p80;
382
+
383
+ /* HE operation */
384
+ uint8_t ni_he_oper_params[IEEE80211_HEOP_PARAMS_LEN];
385
+ uint16_t ni_he_basic_mcs;
386
+
373
387
  /* Timeout handlers which trigger Tx Block Ack negotiation. */
374
388
  struct timeout ni_addba_req_to[IEEE80211_NUM_TID];
375
389
  int ni_addba_req_intval[IEEE80211_NUM_TID];
@@ -381,6 +395,7 @@ struct ieee80211_node {
381
395
 
382
396
  int ni_txmcs; /* current MCS used for TX */
383
397
  int ni_vht_ss; /* VHT # spatial streams */
398
+ int ni_he_ss; /* HE # spatial streams */
384
399
 
385
400
  /* others */
386
401
  u_int16_t ni_associd; /* assoc response */
@@ -398,6 +413,7 @@ struct ieee80211_node {
398
413
  #define IEEE80211_NODE_ASSOCFAIL_BSSID 0x20
399
414
  #define IEEE80211_NODE_ASSOCFAIL_WPA_PROTO 0x40
400
415
  #define IEEE80211_NODE_ASSOCFAIL_WPA_KEY 0x80
416
+ #define IEEE80211_NODE_ASSOCFAIL_CSA 0x100
401
417
 
402
418
  int ni_inact; /* inactivity mark count */
403
419
  int ni_txrate; /* index to ni_rates[] */
@@ -427,6 +443,9 @@ struct ieee80211_node {
427
443
  #define IEEE80211_NODE_VHTCAP 0x40000 /* claims to support VHT */
428
444
  #define IEEE80211_NODE_VHT_SGI80 0x80000 /* SGI on 80 MHz negotiated */
429
445
  #define IEEE80211_NODE_VHT_SGI160 0x100000 /* SGI on 160 MHz negotiated */
446
+ #define IEEE80211_NODE_HE 0x200000 /* HE negotiated */
447
+ #define IEEE80211_NODE_HECAP 0x400000 /* claims to support HE */
448
+ #define IEEE80211_NODE_CSA 0x800000 /* channel switch announced */
430
449
 
431
450
  /* If not NULL, this function gets called when ni_refcnt hits zero. */
432
451
  void (*ni_unref_cb)(struct ieee80211com *,
@@ -590,7 +609,11 @@ ieee80211_node_supports_vht_chan160(struct ieee80211_node *ni)
590
609
 
591
610
  cap_chan_width = (ni->ni_vhtcaps & IEEE80211_VHTCAP_CHAN_WIDTH_MASK) >>
592
611
  IEEE80211_VHTCAP_CHAN_WIDTH_SHIFT;
593
- if (cap_chan_width != IEEE80211_VHTCAP_CHAN_WIDTH_160)
612
+ if (cap_chan_width != IEEE80211_VHTCAP_CHAN_WIDTH_160 &&
613
+ cap_chan_width != IEEE80211_VHTCAP_CHAN_WIDTH_160_8080 &&
614
+ ((ni->ni_vhtcaps & IEEE80211_VHTCAP_EXT_NSS_BW_MASK) == 0 ||
615
+ (ni->ni_vht_tx_max_lgi_mbit_s &
616
+ IEEE80211_VHT_EXT_NSS_BW_CAPABLE) == 0))
594
617
  return 0;
595
618
 
596
619
  op_chan_width = (ni->ni_vht_chan_width &
@@ -600,6 +623,23 @@ ieee80211_node_supports_vht_chan160(struct ieee80211_node *ni)
600
623
  return (op_chan_width == IEEE80211_VHTOP0_CHAN_WIDTH_160);
601
624
  }
602
625
 
626
+ /*
627
+ * Check if the peer supports HE.
628
+ * Require a HE capabilities IE and support for HE MCS with a single
629
+ * spatial stream.
630
+ */
631
+ static inline int
632
+ ieee80211_node_supports_he(struct ieee80211_node *ni)
633
+ {
634
+ uint16_t rx_mcs;
635
+
636
+ rx_mcs = (ni->ni_he_rxmcs_80 & IEEE80211_HE_MCS_FOR_SS_MASK(1)) >>
637
+ IEEE80211_HE_MCS_FOR_SS_SHIFT(1);
638
+
639
+ return ((ni->ni_flags & IEEE80211_NODE_HECAP) &&
640
+ rx_mcs != IEEE80211_HE_MCS_SS_NOT_SUPP);
641
+ }
642
+
603
643
  struct ieee80211com;
604
644
 
605
645
  typedef void ieee80211_iter_func(void *, struct ieee80211_node *);
@@ -642,6 +682,11 @@ void ieee80211_setup_vhtcaps(struct ieee80211_node *, const uint8_t *,
642
682
  void ieee80211_clear_vhtcaps(struct ieee80211_node *);
643
683
  int ieee80211_setup_vhtop(struct ieee80211_node *, const uint8_t *,
644
684
  uint8_t, int);
685
+ void ieee80211_setup_hecaps(struct ieee80211_node *, const uint8_t *,
686
+ uint8_t);
687
+ void ieee80211_clear_hecaps(struct ieee80211_node *);
688
+ int ieee80211_setup_heop(struct ieee80211_node *, const uint8_t *,
689
+ uint8_t, int);
645
690
  int ieee80211_setup_rates(struct ieee80211com *,
646
691
  struct ieee80211_node *, const u_int8_t *, const u_int8_t *, int);
647
692
  enum ieee80211_phymode ieee80211_node_abg_mode(struct ieee80211com *,
@@ -656,6 +701,7 @@ void ieee80211_node_join(struct ieee80211com *,
656
701
  void ieee80211_node_leave(struct ieee80211com *,
657
702
  struct ieee80211_node *);
658
703
  int ieee80211_match_bss(struct ieee80211com *, struct ieee80211_node *, int);
704
+ void ieee80211_node_switch_bss(struct ieee80211com *, struct ieee80211_node *);
659
705
  void ieee80211_node_tx_stopped(struct ieee80211com *, struct ieee80211_node *);
660
706
  struct ieee80211_node *ieee80211_node_choose_bss(struct ieee80211com *, int,
661
707
  struct ieee80211_node **);
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: ieee80211_proto.h,v 1.50 2025/06/14 08:46:34 jsg Exp $ */
1
+ /* $OpenBSD: ieee80211_proto.h,v 1.51 2026/03/19 16:50:32 chris Exp $ */
2
2
  /* $NetBSD: ieee80211_proto.h,v 1.3 2003/10/13 04:23:56 dyoung Exp $ */
3
3
 
4
4
  /*-
@@ -137,6 +137,7 @@ extern u_int8_t *ieee80211_add_xrates(u_int8_t *,
137
137
  extern u_int8_t *ieee80211_add_htcaps(u_int8_t *, struct ieee80211com *);
138
138
  extern u_int8_t *ieee80211_add_htop(u_int8_t *, struct ieee80211com *);
139
139
  extern u_int8_t *ieee80211_add_vhtcaps(u_int8_t *, struct ieee80211com *);
140
+ extern u_int8_t *ieee80211_add_hecaps(u_int8_t *, struct ieee80211com *);
140
141
  extern u_int8_t *ieee80211_add_tie(u_int8_t *, u_int8_t, u_int32_t);
141
142
 
142
143
  extern int ieee80211_parse_rsn(struct ieee80211com *, const u_int8_t *,
@@ -169,6 +170,8 @@ extern void ieee80211_ht_negotiate(struct ieee80211com *,
169
170
  struct ieee80211_node *);
170
171
  extern void ieee80211_vht_negotiate(struct ieee80211com *,
171
172
  struct ieee80211_node *);
173
+ extern void ieee80211_he_negotiate(struct ieee80211com *,
174
+ struct ieee80211_node *);
172
175
  extern void ieee80211_tx_ba_timeout(void *);
173
176
  extern void ieee80211_rx_ba_timeout(void *);
174
177
  extern int ieee80211_addba_request(struct ieee80211com *,
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: ieee80211_var.h,v 1.112 2025/08/01 20:39:26 stsp Exp $ */
1
+ /* $OpenBSD: ieee80211_var.h,v 1.114 2026/03/19 16:50:32 chris Exp $ */
2
2
  /* $NetBSD: ieee80211_var.h,v 1.7 2004/05/06 03:07:10 dyoung Exp $ */
3
3
 
4
4
  /*-
@@ -92,8 +92,9 @@ enum ieee80211_phymode {
92
92
  IEEE80211_MODE_11G = 3, /* 2GHz, OFDM */
93
93
  IEEE80211_MODE_11N = 4, /* 2GHz/5GHz, OFDM/HT */
94
94
  IEEE80211_MODE_11AC = 5, /* 5GHz, OFDM/VHT */
95
+ IEEE80211_MODE_11AX = 6, /* 2GHz/5GHz, OFDM/HE */
95
96
  };
96
- #define IEEE80211_MODE_MAX (IEEE80211_MODE_11AC+1)
97
+ #define IEEE80211_MODE_MAX (IEEE80211_MODE_11AX+1)
97
98
 
98
99
  enum ieee80211_opmode {
99
100
  IEEE80211_M_STA = 1, /* infrastructure station */
@@ -142,6 +143,7 @@ struct ieee80211_channel {
142
143
  */
143
144
  #define IEEE80211_CHANX_80MHZ 0x00000001 /* use of 80 MHz is allowed */
144
145
  #define IEEE80211_CHANX_160MHZ 0x00000002 /* use of 160 MHz is allowed */
146
+ #define IEEE80211_CHANX_HE 0x00000004 /* 11ax/HE channel */
145
147
 
146
148
  /*
147
149
  * Useful combinations of channel characteristics.
@@ -185,6 +187,8 @@ struct ieee80211_channel {
185
187
  (((_c)->ic_xflags & IEEE80211_CHANX_80MHZ) != 0)
186
188
  #define IEEE80211_CHAN_160MHZ_ALLOWED(_c) \
187
189
  (((_c)->ic_xflags & IEEE80211_CHANX_160MHZ) != 0)
190
+ #define IEEE80211_CHAN_HE(_c) \
191
+ (((_c)->ic_xflags & IEEE80211_CHANX_HE) != 0)
188
192
 
189
193
  /*
190
194
  * EDCA AC parameters.
@@ -337,6 +341,8 @@ struct ieee80211com {
337
341
  */
338
342
  struct ieee80211_edca_ac_params ic_edca_ac[EDCA_NUM_AC];
339
343
  u_int ic_edca_updtcount;
344
+ u_int ic_edca_txop_count[EDCA_NUM_AC];
345
+ struct timeval ic_edca_txop_time[EDCA_NUM_AC];
340
346
  u_int16_t ic_tid_noack;
341
347
  u_int8_t ic_globalcnt[EAPOL_KEY_NONCE_LEN];
342
348
  u_int8_t ic_nonce[EAPOL_KEY_NONCE_LEN];
@@ -383,6 +389,15 @@ struct ieee80211com {
383
389
  uint16_t ic_vht_txmcs;
384
390
  uint16_t ic_vht_tx_max_lgi_mbit_s;
385
391
 
392
+ u_int8_t ic_he_mac_cap[IEEE80211_HE_MAC_CAPS_LEN];
393
+ u_int8_t ic_he_phy_cap[IEEE80211_HE_PHY_CAPS_LEN];
394
+ uint16_t ic_he_rxmcs_80;
395
+ uint16_t ic_he_txmcs_80;
396
+ uint16_t ic_he_rxmcs_160;
397
+ uint16_t ic_he_txmcs_160;
398
+ uint16_t ic_he_rxmcs_80p80;
399
+ uint16_t ic_he_txmcs_80p80;
400
+
386
401
  TAILQ_HEAD(, ieee80211_ess) ic_ess;
387
402
  };
388
403
  #define ic_if ic_ac.ac_if
@@ -440,6 +455,7 @@ struct ieee80211_ess {
440
455
  #define IEEE80211_F_BGSCAN 0x08000000 /* STATUS: background scan */
441
456
  #define IEEE80211_F_AUTO_JOIN 0x10000000 /* CONF: auto-join active */
442
457
  #define IEEE80211_F_VHTON 0x20000000 /* CONF: VHT enabled */
458
+ #define IEEE80211_F_HEON 0x40000000 /* CONF: HE enabled */
443
459
 
444
460
  /* ic_xflags */
445
461
  #define IEEE80211_F_TX_MGMT_ONLY 0x00000001 /* leave data frames on ifq */
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: if_ether.h,v 1.96 2025/07/07 00:55:15 jsg Exp $ */
1
+ /* $OpenBSD: if_ether.h,v 1.99 2025/12/02 03:24:19 dlg Exp $ */
2
2
  /* $NetBSD: if_ether.h,v 1.22 1996/05/11 13:00:00 mycroft Exp $ */
3
3
 
4
4
  /*
@@ -220,12 +220,12 @@ do { \
220
220
 
221
221
  #include <net/if_var.h> /* for "struct ifnet" */
222
222
 
223
- struct ether_brport {
224
- struct mbuf *(*eb_input)(struct ifnet *, struct mbuf *,
223
+ struct ether_port {
224
+ struct mbuf *(*ep_input)(struct ifnet *, struct mbuf *,
225
225
  uint64_t, void *, struct netstack *);
226
- void (*eb_port_take)(void *);
227
- void (*eb_port_rele)(void *);
228
- void *eb_port;
226
+ void *(*ep_port_take)(void *);
227
+ void (*ep_port_rele)(void *, void *);
228
+ void *ep_port;
229
229
  };
230
230
 
231
231
  /*
@@ -241,8 +241,8 @@ struct arpcom {
241
241
  int ac_multicnt; /* length of ac_multiaddrs */
242
242
  int ac_multirangecnt; /* number of mcast ranges */
243
243
 
244
- void *ac_trunkport;
245
- const struct ether_brport *ac_brport;
244
+ const struct ether_port *ac_trport;
245
+ const struct ether_port *ac_brport;
246
246
  };
247
247
 
248
248
  extern int arpt_keep; /* arp resolved cache expire */
@@ -289,11 +289,11 @@ void ether_rtrequest(struct ifnet *, int, struct rtentry *);
289
289
  char *ether_sprintf(u_char *);
290
290
 
291
291
  int ether_brport_isset(struct ifnet *);
292
- void ether_brport_set(struct ifnet *, const struct ether_brport *);
292
+ void ether_brport_set(struct ifnet *, const struct ether_port *);
293
293
  void ether_brport_clr(struct ifnet *);
294
- const struct ether_brport *
294
+ const struct ether_port *
295
295
  ether_brport_get(struct ifnet *);
296
- const struct ether_brport *
296
+ const struct ether_port *
297
297
  ether_brport_get_locked(struct ifnet *);
298
298
 
299
299
  uint64_t ether_addr_to_e64(const struct ether_addr *);
@@ -313,6 +313,7 @@ struct ether_extracted {
313
313
  };
314
314
 
315
315
  void ether_extract_headers(struct mbuf *, struct ether_extracted *);
316
+ struct mbuf *ether_offload_ifcap(struct ifnet *, struct mbuf *);
316
317
 
317
318
  /*
318
319
  * Ethernet multicast address structure. There is one of these for each
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: igmp_var.h,v 1.16 2025/03/02 21:28:32 bluhm Exp $ */
1
+ /* $OpenBSD: igmp_var.h,v 1.17 2026/02/26 00:53:18 bluhm Exp $ */
2
2
  /* $NetBSD: igmp_var.h,v 1.9 1996/02/13 23:41:31 christos Exp $ */
3
3
 
4
4
  /*
@@ -105,12 +105,26 @@ igmpstat_inc(enum igmpstat_counters c)
105
105
  */
106
106
  #define IGMP_RANDOM_DELAY(X) (arc4random_uniform(X) + 1)
107
107
 
108
+ struct igmp_pktinfo {
109
+ STAILQ_ENTRY(igmp_pktinfo) ipi_list;
110
+ struct in_addr ipi_addr;
111
+ unsigned int ipi_rdomain;
112
+ unsigned int ipi_ifidx;
113
+ int ipi_type;
114
+ };
115
+ STAILQ_HEAD(igmp_pktlist, igmp_pktinfo);
116
+
108
117
  void igmp_init(void);
109
118
  int igmp_input(struct mbuf **, int *, int, int, struct netstack *);
110
- void igmp_joingroup(struct in_multi *, struct ifnet *);
111
- void igmp_leavegroup(struct in_multi *, struct ifnet *);
119
+ void igmp_joingroup(struct in_multi *, struct ifnet *,
120
+ struct igmp_pktinfo *);
121
+ void igmp_leavegroup(struct in_multi *, struct ifnet *,
122
+ struct igmp_pktinfo *);
112
123
  void igmp_fasttimo(void);
113
124
  void igmp_slowtimo(void);
114
125
  int igmp_sysctl(int *, u_int, void *, size_t *, void *, size_t);
126
+ void igmp_sendpkt(struct igmp_pktinfo *);
127
+
115
128
  #endif /* _KERNEL */
129
+
116
130
  #endif /* _NETINET_IGMP_VAR_H_ */
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: in_pcb.h,v 1.171 2025/07/14 09:01:52 jsg Exp $ */
1
+ /* $OpenBSD: in_pcb.h,v 1.174 2026/02/05 03:26:00 dlg Exp $ */
2
2
  /* $NetBSD: in_pcb.h,v 1.14 1996/02/13 23:42:00 christos Exp $ */
3
3
 
4
4
  /*
@@ -357,6 +357,7 @@ void in_setpeeraddr(struct inpcb *, struct mbuf *);
357
357
  void in_setsockaddr(struct inpcb *, struct mbuf *);
358
358
  int in_sockaddr(struct socket *, struct mbuf *);
359
359
  int in_peeraddr(struct socket *, struct mbuf *);
360
+ int in_flowid(struct socket *);
360
361
  int in_baddynamic(u_int16_t, u_int16_t);
361
362
  int in_rootonly(u_int16_t, u_int16_t);
362
363
  int in_pcbselsrc(struct in_addr *, const struct sockaddr_in *,
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: in_var.h,v 1.41 2018/10/18 15:23:04 cheloha Exp $ */
1
+ /* $OpenBSD: in_var.h,v 1.47 2026/03/22 23:14:00 bluhm Exp $ */
2
2
  /* $NetBSD: in_var.h,v 1.16 1996/02/13 23:42:15 christos Exp $ */
3
3
 
4
4
  /*
@@ -35,6 +35,12 @@
35
35
  #ifndef _NETINET_IN_VAR_H_
36
36
  #define _NETINET_IN_VAR_H_
37
37
 
38
+ /*
39
+ * Locks used to protect struct members in this file:
40
+ * I immutable after creation
41
+ * m multicast if_maddrlock rwlock of parent interface
42
+ */
43
+
38
44
  #include <sys/queue.h>
39
45
 
40
46
  #ifdef _KERNEL
@@ -75,37 +81,9 @@ struct in_aliasreq {
75
81
  struct sockaddr_in ifra_mask;
76
82
  };
77
83
 
78
-
79
- #ifdef _KERNEL
80
- /*
81
- * Macro for finding the internet address structure (in_ifaddr) corresponding
82
- * to a given interface (ifnet structure).
83
- */
84
- #define IFP_TO_IA(ifp, ia) \
85
- /* struct ifnet *ifp; */ \
86
- /* struct in_ifaddr *ia; */ \
87
- do { \
88
- struct ifaddr *ifa; \
89
- NET_ASSERT_LOCKED(); \
90
- TAILQ_FOREACH(ifa, &(ifp)->if_addrlist, ifa_list) { \
91
- if (ifa->ifa_addr->sa_family == AF_INET) \
92
- break; \
93
- } \
94
- (ia) = ifatoia(ifa); \
95
- } while (/* CONSTCOND */ 0)
96
- #endif
97
-
98
- /*
99
- * Per-interface router version information.
100
- */
101
- struct router_info {
102
- unsigned int rti_ifidx;
103
- int rti_type; /* type of router on this interface */
104
- int rti_age; /* time since last v1 query */
105
- LIST_ENTRY(router_info) rti_list;
106
- };
107
-
108
84
  #ifdef _KERNEL
85
+ struct router_info;
86
+
109
87
  /*
110
88
  * Internet multicast address structure. There is one of these for each IP
111
89
  * multicast group to which this host belongs on a given network interface.
@@ -115,11 +93,11 @@ struct in_multi {
115
93
  #define inm_refcnt inm_ifma.ifma_refcnt
116
94
  #define inm_ifidx inm_ifma.ifma_ifidx
117
95
 
118
- struct sockaddr_in inm_sin; /* IPv4 multicast address */
96
+ struct sockaddr_in inm_sin; /* [I] IPv4 multicast address */
119
97
  #define inm_addr inm_sin.sin_addr
120
98
 
121
- u_int inm_state; /* state of membership */
122
- u_int inm_timer; /* IGMP membership report timer */
99
+ u_int inm_state; /* [m] state of membership */
100
+ u_int inm_timer; /* [m] IGMP membership report */
123
101
 
124
102
  struct router_info *inm_rti; /* router version info */
125
103
  };
@@ -130,37 +108,17 @@ ifmatoinm(struct ifmaddr *ifma)
130
108
  return ((struct in_multi *)(ifma));
131
109
  }
132
110
 
133
- /*
134
- * Macro for looking up the in_multi record for a given IP multicast
135
- * address on a given interface. If no matching record is found, "inm"
136
- * returns NULL.
137
- */
138
- #define IN_LOOKUP_MULTI(addr, ifp, inm) \
139
- /* struct in_addr addr; */ \
140
- /* struct ifnet *ifp; */ \
141
- /* struct in_multi *inm; */ \
142
- do { \
143
- struct ifmaddr *ifma; \
144
- \
145
- (inm) = NULL; \
146
- NET_ASSERT_LOCKED(); \
147
- TAILQ_FOREACH(ifma, &(ifp)->if_maddrlist, ifma_list) \
148
- if (ifma->ifma_addr->sa_family == AF_INET && \
149
- ifmatoinm(ifma)->inm_addr.s_addr == (addr).s_addr) {\
150
- (inm) = ifmatoinm(ifma); \
151
- break; \
152
- } \
153
- } while (/* CONSTCOND */ 0)
154
-
111
+ struct in_ifaddr *in_ifp2ia(struct ifnet *);
155
112
  int in_ifinit(struct ifnet *,
156
113
  struct in_ifaddr *, struct sockaddr_in *, int);
157
- struct in_multi *in_addmulti(struct in_addr *, struct ifnet *);
114
+ struct in_multi *in_lookupmulti(const struct in_addr *, struct ifnet *);
115
+ struct in_multi *in_addmulti(const struct in_addr *, struct ifnet *);
158
116
  void in_delmulti(struct in_multi *);
159
- int in_hasmulti(struct in_addr *, struct ifnet *);
117
+ int in_hasmulti(const struct in_addr *, struct ifnet *);
160
118
  void in_ifscrub(struct ifnet *, struct in_ifaddr *);
161
119
  int in_control(struct socket *, u_long, caddr_t, struct ifnet *);
162
120
  int in_ioctl(u_long, caddr_t, struct ifnet *, int);
163
121
  void in_prefixlen2mask(struct in_addr *, int);
164
- #endif
122
+ #endif /* _KERNEL */
165
123
 
166
124
  #endif /* _NETINET_IN_VAR_H_ */
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: ip.h,v 1.20 2021/12/14 23:47:36 dtucker Exp $ */
1
+ /* $OpenBSD: ip.h,v 1.22 2025/12/19 13:58:53 tb Exp $ */
2
2
  /* $NetBSD: ip.h,v 1.9 1995/05/15 01:22:44 cgd Exp $ */
3
3
 
4
4
  /*
@@ -95,7 +95,7 @@ struct ip {
95
95
  #define IPTOS_PREC_ROUTINE 0x00
96
96
 
97
97
  /*
98
- * Definitions for DiffServ Codepoints as per RFCs 2474, 3246, 4594 & 8622.
98
+ * Definitions for DiffServ Codepoints as per RFCs 2474, 3246, 4594, 5865, 8622.
99
99
  * These are the 6 most significant bits as they appear on the wire, so the
100
100
  * two least significant bits must be zero.
101
101
  */
@@ -118,6 +118,7 @@ struct ip {
118
118
  #define IPTOS_DSCP_AF42 0x90
119
119
  #define IPTOS_DSCP_AF43 0x98
120
120
  #define IPTOS_DSCP_CS5 0xa0
121
+ #define IPTOS_DSCP_VA 0xb0
121
122
  #define IPTOS_DSCP_EF 0xb8
122
123
  #define IPTOS_DSCP_CS6 0xc0
123
124
  #define IPTOS_DSCP_CS7 0xe0
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: tcp_timer.h,v 1.27 2025/06/08 17:06:19 bluhm Exp $ */
1
+ /* $OpenBSD: tcp_timer.h,v 1.28 2025/12/31 03:47:04 jsg Exp $ */
2
2
  /* $NetBSD: tcp_timer.h,v 1.6 1995/03/26 20:32:37 jtc Exp $ */
3
3
 
4
4
  /*
@@ -162,7 +162,6 @@ extern int tcp_keepintvl; /* [a] time between keepalive probes */
162
162
  extern int tcp_keepinit_sec; /* [a] copy of above in seconds for sysctl */
163
163
  extern int tcp_keepidle_sec; /* [a] copy of above in seconds for sysctl */
164
164
  extern int tcp_keepintvl_sec; /* [a] copy of above in seconds for sysctl */
165
- extern int tcp_ttl; /* time to live for TCP segs */
166
165
  extern const int tcp_backoff[];
167
166
  #endif /* _KERNEL */
168
167
  #endif /* _NETINET_TCP_TIMER_H_ */
@@ -1,4 +1,4 @@
1
- /* $OpenBSD: in6_var.h,v 1.81 2025/05/20 05:51:43 bluhm Exp $ */
1
+ /* $OpenBSD: in6_var.h,v 1.85 2026/03/22 23:14:00 bluhm Exp $ */
2
2
  /* $KAME: in6_var.h,v 1.55 2001/02/16 12:49:45 itojun Exp $ */
3
3
 
4
4
  /*
@@ -64,6 +64,12 @@
64
64
  #ifndef _NETINET6_IN6_VAR_H_
65
65
  #define _NETINET6_IN6_VAR_H_
66
66
 
67
+ /*
68
+ * Locks used to protect struct members in this file:
69
+ * I immutable after creation
70
+ * m multicast if_maddrlock rwlock of parent interface
71
+ */
72
+
67
73
  /*
68
74
  * Interface address, Internet version. One of these structures
69
75
  * is allocated for each interface with an Internet address.
@@ -316,11 +322,11 @@ struct in6_multi {
316
322
  #define in6m_refcnt in6m_ifma.ifma_refcnt
317
323
  #define in6m_ifidx in6m_ifma.ifma_ifidx
318
324
 
319
- struct sockaddr_in6 in6m_sin; /* IPv6 multicast address */
325
+ struct sockaddr_in6 in6m_sin; /* [I] IPv6 multicast address */
320
326
  #define in6m_addr in6m_sin.sin6_addr
321
327
 
322
- u_int in6m_state; /* state of membership */
323
- u_int in6m_timer; /* MLD6 membership report timer */
328
+ u_int in6m_state; /* [m] state of membership */
329
+ u_int in6m_timer; /* [m] MLD6 membership report */
324
330
  };
325
331
 
326
332
  static __inline struct in6_multi *
@@ -329,32 +335,12 @@ ifmatoin6m(struct ifmaddr *ifma)
329
335
  return ((struct in6_multi *)(ifma));
330
336
  }
331
337
 
332
- /*
333
- * Macros for looking up the in6_multi record for a given IP6 multicast
334
- * address on a given interface. If no matching record is found, "in6m"
335
- * returns NULL.
336
- */
337
- #define IN6_LOOKUP_MULTI(addr, ifp, in6m) \
338
- /* struct in6_addr addr; */ \
339
- /* struct ifnet *ifp; */ \
340
- /* struct in6_multi *in6m; */ \
341
- do { \
342
- struct ifmaddr *ifma; \
343
- \
344
- (in6m) = NULL; \
345
- TAILQ_FOREACH(ifma, &(ifp)->if_maddrlist, ifma_list) \
346
- if (ifma->ifma_addr->sa_family == AF_INET6 && \
347
- IN6_ARE_ADDR_EQUAL(&ifmatoin6m(ifma)->in6m_addr, \
348
- &(addr))) { \
349
- (in6m) = ifmatoin6m(ifma); \
350
- break; \
351
- } \
352
- } while (/* CONSTCOND */ 0)
353
-
354
- struct in6_multi *in6_addmulti(struct in6_addr *, struct ifnet *, int *);
338
+ struct in6_multi *in6_lookupmulti(const struct in6_addr *, struct ifnet *);
339
+ struct in6_multi *in6_addmulti(const struct in6_addr *, struct ifnet *, int *);
355
340
  void in6_delmulti(struct in6_multi *);
356
- int in6_hasmulti(struct in6_addr *, struct ifnet *);
357
- struct in6_multi_mship *in6_joingroup(struct ifnet *, struct in6_addr *, int *);
341
+ int in6_hasmulti(const struct in6_addr *, struct ifnet *);
342
+ struct in6_multi_mship *in6_joingroup(struct ifnet *, const struct in6_addr *,
343
+ int *);
358
344
  void in6_leavegroup(struct in6_multi_mship *);
359
345
  int in6_control(struct socket *, u_long, caddr_t, struct ifnet *);
360
346
  int in6_ioctl(u_long, caddr_t, struct ifnet *, int);