Skip to content

Commit d6d144d

Browse files
committed
x/net/ipv6: add source-specific multicast types, constants
LGTM=iant R=iant CC=golang-codereviews https://golang.org/cl/169500043
1 parent 1d6af0d commit d6d144d

11 files changed

+756
-67
lines changed

Diff for: ipv6/defs_darwin.go

+21-4
Original file line numberDiff line numberDiff line change
@@ -69,21 +69,34 @@ const (
6969

7070
sysIPV6_PREFER_TEMPADDR = C.IPV6_PREFER_TEMPADDR
7171

72+
sysIPV6_MSFILTER = C.IPV6_MSFILTER
73+
sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
74+
sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
75+
sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
76+
sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
77+
sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
78+
sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
79+
7280
sysIPV6_BOUND_IF = C.IPV6_BOUND_IF
7381

7482
sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT
7583
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
7684
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
7785

78-
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
79-
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
80-
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
86+
sysSizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
87+
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
88+
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
89+
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
8190

82-
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
91+
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
92+
sysSizeofGroupReq = C.sizeof_struct_group_req
93+
sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
8394

8495
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
8596
)
8697

98+
type sysSockaddrStorage C.struct_sockaddr_storage
99+
87100
type sysSockaddrInet6 C.struct_sockaddr_in6
88101

89102
type sysInet6Pktinfo C.struct_in6_pktinfo
@@ -93,3 +106,7 @@ type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
93106
type sysIPv6Mreq C.struct_ipv6_mreq
94107

95108
type sysICMPv6Filter C.struct_icmp6_filter
109+
110+
type sysGroupReq C.struct_group_req
111+
112+
type sysGroupSourceReq C.struct_group_source_req

Diff for: ipv6/defs_freebsd.go

+22-4
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,33 @@ const (
6363

6464
sysIPV6_BINDANY = C.IPV6_BINDANY
6565

66+
sysIPV6_MSFILTER = C.IPV6_MSFILTER
67+
68+
sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
69+
sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
70+
sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
71+
sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
72+
sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
73+
sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
74+
6675
sysIPV6_PORTRANGE_DEFAULT = C.IPV6_PORTRANGE_DEFAULT
6776
sysIPV6_PORTRANGE_HIGH = C.IPV6_PORTRANGE_HIGH
6877
sysIPV6_PORTRANGE_LOW = C.IPV6_PORTRANGE_LOW
6978

70-
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
71-
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
72-
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
79+
sysSizeofSockaddrStorage = C.sizeof_struct_sockaddr_storage
80+
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
81+
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
82+
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
7383

74-
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
84+
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
85+
sysSizeofGroupReq = C.sizeof_struct_group_req
86+
sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
7587

7688
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
7789
)
7890

91+
type sysSockaddrStorage C.struct_sockaddr_storage
92+
7993
type sysSockaddrInet6 C.struct_sockaddr_in6
8094

8195
type sysInet6Pktinfo C.struct_in6_pktinfo
@@ -84,4 +98,8 @@ type sysIPv6Mtuinfo C.struct_ip6_mtuinfo
8498

8599
type sysIPv6Mreq C.struct_ipv6_mreq
86100

101+
type sysGroupReq C.struct_group_req
102+
103+
type sysGroupSourceReq C.struct_group_source_req
104+
87105
type sysICMPv6Filter C.struct_icmp6_filter

Diff for: ipv6/defs_linux.go

+42-25
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
package ipv6
1010

1111
/*
12+
#include <linux/in.h>
1213
#include <linux/in6.h>
1314
#include <linux/ipv6.h>
1415
#include <linux/icmpv6.h>
@@ -27,26 +28,33 @@ const (
2728
sysIPV6_NEXTHOP = C.IPV6_NEXTHOP
2829
sysIPV6_FLOWINFO = C.IPV6_FLOWINFO
2930

30-
sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
31-
sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
32-
sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
33-
sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
34-
sysIPV6_ADD_MEMBERSHIP = C.IPV6_ADD_MEMBERSHIP
35-
sysIPV6_DROP_MEMBERSHIP = C.IPV6_DROP_MEMBERSHIP
36-
sysIPV6_ROUTER_ALERT = C.IPV6_ROUTER_ALERT
37-
sysIPV6_MTU_DISCOVER = C.IPV6_MTU_DISCOVER
38-
sysIPV6_MTU = C.IPV6_MTU
39-
sysIPV6_RECVERR = C.IPV6_RECVERR
40-
sysIPV6_V6ONLY = C.IPV6_V6ONLY
41-
sysIPV6_JOIN_ANYCAST = C.IPV6_JOIN_ANYCAST
42-
sysIPV6_LEAVE_ANYCAST = C.IPV6_LEAVE_ANYCAST
43-
44-
sysIPV6_PMTUDISC_DONT = C.IPV6_PMTUDISC_DONT
45-
sysIPV6_PMTUDISC_WANT = C.IPV6_PMTUDISC_WANT
46-
sysIPV6_PMTUDISC_DO = C.IPV6_PMTUDISC_DO
47-
sysIPV6_PMTUDISC_PROBE = C.IPV6_PMTUDISC_PROBE
48-
sysIPV6_PMTUDISC_INTERFACE = C.IPV6_PMTUDISC_INTERFACE
49-
sysIPV6_PMTUDISC_OMIT = C.IPV6_PMTUDISC_OMIT
31+
sysIPV6_UNICAST_HOPS = C.IPV6_UNICAST_HOPS
32+
sysIPV6_MULTICAST_IF = C.IPV6_MULTICAST_IF
33+
sysIPV6_MULTICAST_HOPS = C.IPV6_MULTICAST_HOPS
34+
sysIPV6_MULTICAST_LOOP = C.IPV6_MULTICAST_LOOP
35+
sysIPV6_ADD_MEMBERSHIP = C.IPV6_ADD_MEMBERSHIP
36+
sysIPV6_DROP_MEMBERSHIP = C.IPV6_DROP_MEMBERSHIP
37+
sysMCAST_JOIN_GROUP = C.MCAST_JOIN_GROUP
38+
sysMCAST_LEAVE_GROUP = C.MCAST_LEAVE_GROUP
39+
sysMCAST_JOIN_SOURCE_GROUP = C.MCAST_JOIN_SOURCE_GROUP
40+
sysMCAST_LEAVE_SOURCE_GROUP = C.MCAST_LEAVE_SOURCE_GROUP
41+
sysMCAST_BLOCK_SOURCE = C.MCAST_BLOCK_SOURCE
42+
sysMCAST_UNBLOCK_SOURCE = C.MCAST_UNBLOCK_SOURCE
43+
sysMCAST_MSFILTER = C.MCAST_MSFILTER
44+
sysIPV6_ROUTER_ALERT = C.IPV6_ROUTER_ALERT
45+
sysIPV6_MTU_DISCOVER = C.IPV6_MTU_DISCOVER
46+
sysIPV6_MTU = C.IPV6_MTU
47+
sysIPV6_RECVERR = C.IPV6_RECVERR
48+
sysIPV6_V6ONLY = C.IPV6_V6ONLY
49+
sysIPV6_JOIN_ANYCAST = C.IPV6_JOIN_ANYCAST
50+
sysIPV6_LEAVE_ANYCAST = C.IPV6_LEAVE_ANYCAST
51+
52+
//sysIPV6_PMTUDISC_DONT = C.IPV6_PMTUDISC_DONT
53+
//sysIPV6_PMTUDISC_WANT = C.IPV6_PMTUDISC_WANT
54+
//sysIPV6_PMTUDISC_DO = C.IPV6_PMTUDISC_DO
55+
//sysIPV6_PMTUDISC_PROBE = C.IPV6_PMTUDISC_PROBE
56+
//sysIPV6_PMTUDISC_INTERFACE = C.IPV6_PMTUDISC_INTERFACE
57+
//sysIPV6_PMTUDISC_OMIT = C.IPV6_PMTUDISC_OMIT
5058

5159
sysIPV6_FLOWLABEL_MGR = C.IPV6_FLOWLABEL_MGR
5260
sysIPV6_FLOWINFO_SEND = C.IPV6_FLOWINFO_SEND
@@ -96,16 +104,21 @@ const (
96104
sysICMPV6_FILTER_BLOCKOTHERS = C.ICMPV6_FILTER_BLOCKOTHERS
97105
sysICMPV6_FILTER_PASSONLY = C.ICMPV6_FILTER_PASSONLY
98106

99-
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
100-
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
101-
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
102-
sysSizeofIPv6FlowlabelReq = C.sizeof_struct_in6_flowlabel_req
107+
sysSizeofKernelSockaddrStorage = C.sizeof_struct___kernel_sockaddr_storage
108+
sysSizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6
109+
sysSizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo
110+
sysSizeofIPv6Mtuinfo = C.sizeof_struct_ip6_mtuinfo
111+
sysSizeofIPv6FlowlabelReq = C.sizeof_struct_in6_flowlabel_req
103112

104-
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
113+
sysSizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq
114+
sysSizeofGroupReq = C.sizeof_struct_group_req
115+
sysSizeofGroupSourceReq = C.sizeof_struct_group_source_req
105116

106117
sysSizeofICMPv6Filter = C.sizeof_struct_icmp6_filter
107118
)
108119

120+
type sysKernelSockaddrStorage C.struct___kernel_sockaddr_storage
121+
109122
type sysSockaddrInet6 C.struct_sockaddr_in6
110123

111124
type sysInet6Pktinfo C.struct_in6_pktinfo
@@ -116,4 +129,8 @@ type sysIPv6FlowlabelReq C.struct_in6_flowlabel_req
116129

117130
type sysIPv6Mreq C.struct_ipv6_mreq
118131

132+
type sysGroupReq C.struct_group_req
133+
134+
type sysGroupSourceReq C.struct_group_source_req
135+
119136
type sysICMPv6Filter C.struct_icmp6_filter

Diff for: ipv6/gen.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,12 @@ func genzsys() error {
6363
if err != nil {
6464
return err
6565
}
66-
if err := ioutil.WriteFile("zsys_"+runtime.GOOS+".go", b, 0644); err != nil {
66+
zsys := "zsys_" + runtime.GOOS + ".go"
67+
switch runtime.GOOS {
68+
case "freebsd", "linux":
69+
zsys = "zsys_" + runtime.GOOS + "_" + runtime.GOARCH + ".go"
70+
}
71+
if err := ioutil.WriteFile(zsys, b, 0644); err != nil {
6772
return err
6873
}
6974
return nil

Diff for: ipv6/zsys_darwin.go

+34-4
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,40 @@ const (
5757

5858
sysIPV6_PREFER_TEMPADDR = 0x3f
5959

60+
sysIPV6_MSFILTER = 0x4a
61+
sysMCAST_JOIN_GROUP = 0x50
62+
sysMCAST_LEAVE_GROUP = 0x51
63+
sysMCAST_JOIN_SOURCE_GROUP = 0x52
64+
sysMCAST_LEAVE_SOURCE_GROUP = 0x53
65+
sysMCAST_BLOCK_SOURCE = 0x54
66+
sysMCAST_UNBLOCK_SOURCE = 0x55
67+
6068
sysIPV6_BOUND_IF = 0x7d
6169

6270
sysIPV6_PORTRANGE_DEFAULT = 0x0
6371
sysIPV6_PORTRANGE_HIGH = 0x1
6472
sysIPV6_PORTRANGE_LOW = 0x2
6573

66-
sysSizeofSockaddrInet6 = 0x1c
67-
sysSizeofInet6Pktinfo = 0x14
68-
sysSizeofIPv6Mtuinfo = 0x20
74+
sysSizeofSockaddrStorage = 0x80
75+
sysSizeofSockaddrInet6 = 0x1c
76+
sysSizeofInet6Pktinfo = 0x14
77+
sysSizeofIPv6Mtuinfo = 0x20
6978

70-
sysSizeofIPv6Mreq = 0x14
79+
sysSizeofIPv6Mreq = 0x14
80+
sysSizeofGroupReq = 0x84
81+
sysSizeofGroupSourceReq = 0x104
7182

7283
sysSizeofICMPv6Filter = 0x20
7384
)
7485

86+
type sysSockaddrStorage struct {
87+
Len uint8
88+
Family uint8
89+
X__ss_pad1 [6]int8
90+
X__ss_align int64
91+
X__ss_pad2 [112]int8
92+
}
93+
7594
type sysSockaddrInet6 struct {
7695
Len uint8
7796
Family uint8
@@ -99,3 +118,14 @@ type sysIPv6Mreq struct {
99118
type sysICMPv6Filter struct {
100119
Filt [8]uint32
101120
}
121+
122+
type sysGroupReq struct {
123+
Interface uint32
124+
Pad_cgo_0 [128]byte
125+
}
126+
127+
type sysGroupSourceReq struct {
128+
Interface uint32
129+
Pad_cgo_0 [128]byte
130+
Pad_cgo_1 [128]byte
131+
}

Diff for: ipv6/zsys_freebsd.go renamed to ipv6/zsys_freebsd_386.go

+35-4
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,39 @@ const (
4949

5050
sysIPV6_BINDANY = 0x40
5151

52+
sysIPV6_MSFILTER = 0x4a
53+
54+
sysMCAST_JOIN_GROUP = 0x50
55+
sysMCAST_LEAVE_GROUP = 0x51
56+
sysMCAST_JOIN_SOURCE_GROUP = 0x52
57+
sysMCAST_LEAVE_SOURCE_GROUP = 0x53
58+
sysMCAST_BLOCK_SOURCE = 0x54
59+
sysMCAST_UNBLOCK_SOURCE = 0x55
60+
5261
sysIPV6_PORTRANGE_DEFAULT = 0x0
5362
sysIPV6_PORTRANGE_HIGH = 0x1
5463
sysIPV6_PORTRANGE_LOW = 0x2
5564

56-
sysSizeofSockaddrInet6 = 0x1c
57-
sysSizeofInet6Pktinfo = 0x14
58-
sysSizeofIPv6Mtuinfo = 0x20
65+
sysSizeofSockaddrStorage = 0x80
66+
sysSizeofSockaddrInet6 = 0x1c
67+
sysSizeofInet6Pktinfo = 0x14
68+
sysSizeofIPv6Mtuinfo = 0x20
5969

60-
sysSizeofIPv6Mreq = 0x14
70+
sysSizeofIPv6Mreq = 0x14
71+
sysSizeofGroupReq = 0x84
72+
sysSizeofGroupSourceReq = 0x104
6173

6274
sysSizeofICMPv6Filter = 0x20
6375
)
6476

77+
type sysSockaddrStorage struct {
78+
Len uint8
79+
Family uint8
80+
X__ss_pad1 [6]int8
81+
X__ss_align int64
82+
X__ss_pad2 [112]int8
83+
}
84+
6585
type sysSockaddrInet6 struct {
6686
Len uint8
6787
Family uint8
@@ -86,6 +106,17 @@ type sysIPv6Mreq struct {
86106
Interface uint32
87107
}
88108

109+
type sysGroupReq struct {
110+
Interface uint32
111+
Group sysSockaddrStorage
112+
}
113+
114+
type sysGroupSourceReq struct {
115+
Interface uint32
116+
Group sysSockaddrStorage
117+
Source sysSockaddrStorage
118+
}
119+
89120
type sysICMPv6Filter struct {
90121
Filt [8]uint32
91122
}

0 commit comments

Comments
 (0)