...
1
2
3
4
5
6
7 package ipv4
8
9 import (
10 "net"
11 "unsafe"
12
13 "golang.org/x/net/internal/socket"
14 )
15
16 func (so *sockOpt) setGroupReq(c *socket.Conn, ifi *net.Interface, grp net.IP) error {
17 var gr groupReq
18 if ifi != nil {
19 gr.Interface = uint32(ifi.Index)
20 }
21 gr.setGroup(grp)
22 var b []byte
23 if compatFreeBSD32 {
24 var d [sizeofGroupReq + 4]byte
25 s := (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))
26 copy(d[:4], s[:4])
27 copy(d[8:], s[4:])
28 b = d[:]
29 } else {
30 b = (*[sizeofGroupReq]byte)(unsafe.Pointer(&gr))[:sizeofGroupReq]
31 }
32 return so.Set(c, b)
33 }
34
35 func (so *sockOpt) setGroupSourceReq(c *socket.Conn, ifi *net.Interface, grp, src net.IP) error {
36 var gsr groupSourceReq
37 if ifi != nil {
38 gsr.Interface = uint32(ifi.Index)
39 }
40 gsr.setSourceGroup(grp, src)
41 var b []byte
42 if compatFreeBSD32 {
43 var d [sizeofGroupSourceReq + 4]byte
44 s := (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))
45 copy(d[:4], s[:4])
46 copy(d[8:], s[4:])
47 b = d[:]
48 } else {
49 b = (*[sizeofGroupSourceReq]byte)(unsafe.Pointer(&gsr))[:sizeofGroupSourceReq]
50 }
51 return so.Set(c, b)
52 }
53
View as plain text