Skip to content

Commit 4a29150

Browse files
paulzholbradfitz
authored andcommitted
Revert "syscall: route_freebsd switch routing socket sysctl to use NET_RT_IFLISTL"
This reverts commit f25f6ea. Sorry, this was not meant to go in without the ztypes_freebsd_arm.go and the copyFromV9 function. Change-Id: I4ac2a8a23809ec1b1b9e42992cd0f3c349848f06 Reviewed-on: https://go-review.googlesource.com/17472 Run-TryBot: Mikio Hara <[email protected]> Run-TryBot: Alex Brainman <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Brad Fitzpatrick <[email protected]>
1 parent 5b1a8a5 commit 4a29150

16 files changed

+198
-542
lines changed

src/net/interface_bsd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
// network interfaces. Otherwise it returns a mapping of a specific
1717
// interface.
1818
func interfaceTable(ifindex int) ([]Interface, error) {
19-
tab, err := syscall.RouteRIB(rtSockIfListSyscall, ifindex)
19+
tab, err := syscall.RouteRIB(syscall.NET_RT_IFLIST, ifindex)
2020
if err != nil {
2121
return nil, os.NewSyscallError("routerib", err)
2222
}
@@ -102,7 +102,7 @@ func interfaceAddrTable(ifi *Interface) ([]Addr, error) {
102102
if ifi != nil {
103103
index = ifi.Index
104104
}
105-
tab, err := syscall.RouteRIB(rtSockIfListSyscall, index)
105+
tab, err := syscall.RouteRIB(syscall.NET_RT_IFLIST, index)
106106
if err != nil {
107107
return nil, os.NewSyscallError("routerib", err)
108108
}

src/net/interface_darwin.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ import (
99
"syscall"
1010
)
1111

12-
const rtSockIfListSyscall = syscall.NET_RT_IFLIST
13-
1412
// interfaceMulticastAddrTable returns addresses for a specific
1513
// interface.
1614
func interfaceMulticastAddrTable(ifi *Interface) ([]Addr, error) {

src/net/interface_dragonfly.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44

55
package net
66

7-
import "syscall"
8-
9-
const rtSockIfListSyscall = syscall.NET_RT_IFLIST
10-
117
// interfaceMulticastAddrTable returns addresses for a specific
128
// interface.
139
func interfaceMulticastAddrTable(ifi *Interface) ([]Addr, error) {

src/net/interface_freebsd.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ import (
99
"syscall"
1010
)
1111

12-
const rtSockIfListSyscall = syscall.NET_RT_IFLISTL
13-
1412
// interfaceMulticastAddrTable returns addresses for a specific
1513
// interface.
1614
func interfaceMulticastAddrTable(ifi *Interface) ([]Addr, error) {

src/net/interface_netbsd.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44

55
package net
66

7-
import "syscall"
8-
9-
const rtSockIfListSyscall = syscall.NET_RT_IFLIST
10-
117
// interfaceMulticastAddrTable returns addresses for a specific
128
// interface.
139
func interfaceMulticastAddrTable(ifi *Interface) ([]Addr, error) {

src/net/interface_openbsd.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,6 @@
44

55
package net
66

7-
import "syscall"
8-
9-
const rtSockIfListSyscall = syscall.NET_RT_IFLIST
10-
117
// interfaceMulticastAddrTable returns addresses for a specific
128
// interface.
139
func interfaceMulticastAddrTable(ifi *Interface) ([]Addr, error) {

src/syscall/route_bsd_test.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,13 @@ import (
1010
"fmt"
1111
"net"
1212
"os"
13-
"runtime"
1413
"syscall"
1514
"testing"
1615
"time"
1716
)
1817

1918
func TestRouteRIB(t *testing.T) {
20-
var rtSockIfListSyscall = syscall.NET_RT_IFLIST
21-
if runtime.GOOS == "freebsd" {
22-
rtSockIfListSyscall = syscall.NET_RT_IFLISTL
23-
}
24-
for _, facility := range []int{syscall.NET_RT_DUMP, rtSockIfListSyscall} {
19+
for _, facility := range []int{syscall.NET_RT_DUMP, syscall.NET_RT_IFLIST} {
2520
for _, param := range []int{syscall.AF_UNSPEC, syscall.AF_INET, syscall.AF_INET6} {
2621
var err error
2722
var b []byte

src/syscall/route_freebsd.go

Lines changed: 3 additions & 120 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ package syscall
66

77
import "unsafe"
88

9-
// See https://www.freebsd.org/doc/en_US.ISO8859-1/books/porters-handbook/versions.html#freebsd-versions-table.
9+
// See http://www.freebsd.org/doc/en/books/porters-handbook/freebsd-versions.html.
1010
var freebsdVersion uint32
1111

1212
func init() {
@@ -42,132 +42,15 @@ func (any *anyMessage) toRoutingMessage(b []byte) RoutingMessage {
4242
p := (*InterfaceAnnounceMessage)(unsafe.Pointer(any))
4343
return &InterfaceAnnounceMessage{Header: p.Header}
4444
case RTM_NEWADDR, RTM_DELADDR:
45-
return any.parseInterfaceAddrMessage(b)
45+
p := (*InterfaceAddrMessage)(unsafe.Pointer(any))
46+
return &InterfaceAddrMessage{Header: p.Header, Data: b[SizeofIfaMsghdr:any.Msglen]}
4647
case RTM_NEWMADDR, RTM_DELMADDR:
4748
p := (*InterfaceMulticastAddrMessage)(unsafe.Pointer(any))
4849
return &InterfaceMulticastAddrMessage{Header: p.Header, Data: b[SizeofIfmaMsghdr:any.Msglen]}
4950
}
5051
return nil
5152
}
5253

53-
func (any *anyMessage) parseInterfaceMessage(b []byte) *InterfaceMessage {
54-
p := (*ifMsghdrFixed)(unsafe.Pointer(any))
55-
h := IfMsghdr{
56-
Msglen: p.Msglen,
57-
Version: p.Version,
58-
Type: p.Type,
59-
Addrs: p.Addrs,
60-
Flags: p.Flags,
61-
Index: p.Index,
62-
Len: p.Len,
63-
Data_off: p.Data_off,
64-
}
65-
66-
switch {
67-
case freebsdVersion >= 1100011:
68-
// FreeBSD 11 uses a new struct if_data layout
69-
// See https://svnweb.freebsd.org/base?view=revision&revision=263102
70-
data11 := *(*ifData11Raw)(unsafe.Pointer(&b[p.Data_off:p.Len][0]))
71-
h.Data.copyFromV11Raw(&data11)
72-
case freebsdVersion >= 1001000:
73-
// FreeBSD 10.1 and newer
74-
data10 := *(*ifData10)(unsafe.Pointer(&b[p.Data_off:p.Len][0]))
75-
h.Data.copyFromV10(&data10)
76-
case freebsdVersion >= 903000:
77-
// TODO
78-
}
79-
80-
return &InterfaceMessage{Header: h, Data: b[p.Len:any.Msglen]}
81-
}
82-
83-
func (d *IfData) copyFromV11Raw(data11 *ifData11Raw) {
84-
d.Type = data11.Type
85-
d.Physical = data11.Physical
86-
d.Addrlen = data11.Addrlen
87-
d.Hdrlen = data11.Hdrlen
88-
d.Link_state = data11.Link_state
89-
d.Vhid = data11.Vhid
90-
d.Datalen = data11.Datalen
91-
d.Mtu = data11.Mtu
92-
d.Metric = data11.Metric
93-
d.Baudrate = data11.Baudrate
94-
d.Ipackets = data11.Ipackets
95-
d.Ierrors = data11.Ierrors
96-
d.Opackets = data11.Opackets
97-
d.Oerrors = data11.Oerrors
98-
d.Collisions = data11.Collisions
99-
d.Ibytes = data11.Ibytes
100-
d.Obytes = data11.Obytes
101-
d.Imcasts = data11.Imcasts
102-
d.Omcasts = data11.Omcasts
103-
d.Iqdrops = data11.Iqdrops
104-
d.Oqdrops = data11.Oqdrops
105-
d.Noproto = data11.Noproto
106-
d.Hwassist = data11.Hwassist
107-
108-
d.fillEpochLastChange(data11)
109-
}
110-
111-
func (d *IfData) copyFromV10(data10 *ifData10) {
112-
d.Type = data10.Type
113-
d.Physical = data10.Physical
114-
d.Addrlen = data10.Addrlen
115-
d.Hdrlen = data10.Hdrlen
116-
d.Link_state = data10.Link_state
117-
d.Vhid = data10.Vhid
118-
d.Datalen = uint16(data10.Datalen)
119-
d.Mtu = uint32(data10.Mtu)
120-
d.Metric = uint32(data10.Metric)
121-
d.Baudrate = uint64(data10.Baudrate)
122-
d.Ipackets = uint64(data10.Ipackets)
123-
d.Ierrors = uint64(data10.Ierrors)
124-
d.Opackets = uint64(data10.Opackets)
125-
d.Oerrors = uint64(data10.Oerrors)
126-
d.Collisions = uint64(data10.Collisions)
127-
d.Ibytes = uint64(data10.Ibytes)
128-
d.Obytes = uint64(data10.Obytes)
129-
d.Imcasts = uint64(data10.Imcasts)
130-
d.Omcasts = uint64(data10.Omcasts)
131-
d.Iqdrops = uint64(data10.Iqdrops)
132-
d.Oqdrops = uint64(data10.Oqdrops)
133-
d.Noproto = uint64(data10.Noproto)
134-
d.Hwassist = uint64(data10.Hwassist)
135-
136-
d.Epoch = data10.Epoch
137-
d.Lastchange = data10.Lastchange
138-
}
139-
140-
func (any *anyMessage) parseInterfaceAddrMessage(b []byte) *InterfaceAddrMessage {
141-
p := (*IfaMsghdr)(unsafe.Pointer(any))
142-
143-
h := IfaMsghdr{
144-
Msglen: p.Msglen,
145-
Version: p.Version,
146-
Type: p.Type,
147-
Addrs: p.Addrs,
148-
Flags: p.Flags,
149-
Index: p.Index,
150-
Len: p.Len,
151-
Data_off: p.Data_off,
152-
Metric: p.Metric,
153-
}
154-
155-
switch {
156-
case freebsdVersion >= 1100011:
157-
// FreeBSD 11 uses a new struct if_data layout
158-
// See https://svnweb.freebsd.org/base?view=revision&revision=263102
159-
data11 := *(*ifData11Raw)(unsafe.Pointer(&b[p.Data_off:p.Len][0]))
160-
h.Data.copyFromV11Raw(&data11)
161-
case freebsdVersion >= 1001000:
162-
// FreeBSD 10.1 and newer
163-
data10 := *(*ifData10)(unsafe.Pointer(&b[p.Data_off:p.Len][0]))
164-
h.Data.copyFromV10(&data10)
165-
case freebsdVersion >= 903000:
166-
// TODO
167-
}
168-
return &InterfaceAddrMessage{Header: h, Data: b[p.Len:any.Msglen]}
169-
}
170-
17154
// InterfaceAnnounceMessage represents a routing message containing
17255
// network interface arrival and departure information.
17356
type InterfaceAnnounceMessage struct {

src/syscall/route_freebsd_32bit.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,18 @@ func (any *anyMessage) parseRouteMessage(b []byte) *RouteMessage {
1616
}
1717
return &RouteMessage{Header: p.Header, Data: b[rsaAlignOf(off):any.Msglen]}
1818
}
19+
20+
func (any *anyMessage) parseInterfaceMessage(b []byte) *InterfaceMessage {
21+
p := (*InterfaceMessage)(unsafe.Pointer(any))
22+
// FreeBSD 10 and beyond have a restructured mbuf
23+
// packet header view.
24+
// See http://svnweb.freebsd.org/base?view=revision&revision=254804.
25+
if freebsdVersion >= 1000000 {
26+
m := (*ifMsghdr)(unsafe.Pointer(any))
27+
p.Header.Data.Hwassist = uint32(m.Data.Hwassist)
28+
p.Header.Data.Epoch = m.Data.Epoch
29+
p.Header.Data.Lastchange = m.Data.Lastchange
30+
return &InterfaceMessage{Header: p.Header, Data: b[int(unsafe.Offsetof(p.Header.Data))+int(p.Header.Data.Datalen) : any.Msglen]}
31+
}
32+
return &InterfaceMessage{Header: p.Header, Data: b[int(unsafe.Offsetof(p.Header.Data))+int(p.Header.Data.Datalen) : any.Msglen]}
33+
}

src/syscall/route_freebsd_64bit.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,8 @@ func (any *anyMessage) parseRouteMessage(b []byte) *RouteMessage {
1212
p := (*RouteMessage)(unsafe.Pointer(any))
1313
return &RouteMessage{Header: p.Header, Data: b[rsaAlignOf(int(unsafe.Offsetof(p.Header.Rmx))+SizeofRtMetrics):any.Msglen]}
1414
}
15+
16+
func (any *anyMessage) parseInterfaceMessage(b []byte) *InterfaceMessage {
17+
p := (*InterfaceMessage)(unsafe.Pointer(any))
18+
return &InterfaceMessage{Header: p.Header, Data: b[int(unsafe.Offsetof(p.Header.Data))+int(p.Header.Data.Datalen) : any.Msglen]}
19+
}

src/syscall/syscall_freebsd_386.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,6 @@ func (cmsg *Cmsghdr) SetLen(length int) {
4343
cmsg.Len = uint32(length)
4444
}
4545

46-
func (d *IfData) fillEpochLastChange(data11 *ifData11Raw) {
47-
d.Epoch = *(*int32)(unsafe.Pointer(&data11.X__ifi_epoch[0]))
48-
d.Lastchange.Sec = *(*int32)(unsafe.Pointer(&data11.X__ifi_lastchange[0:4][0]))
49-
d.Lastchange.Usec = *(*int32)(unsafe.Pointer(&data11.X__ifi_lastchange[4:8][0]))
50-
}
51-
5246
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
5347
var writtenOut uint64 = 0
5448
_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)

src/syscall/syscall_freebsd_amd64.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,6 @@ func (cmsg *Cmsghdr) SetLen(length int) {
4343
cmsg.Len = uint32(length)
4444
}
4545

46-
func (d *IfData) fillEpochLastChange(data11 *ifData11Raw) {
47-
d.Epoch = *(*int64)(unsafe.Pointer(&data11.X__ifi_epoch[0]))
48-
d.Lastchange.Sec = *(*int64)(unsafe.Pointer(&data11.X__ifi_lastchange[0:8][0]))
49-
d.Lastchange.Usec = *(*int64)(unsafe.Pointer(&data11.X__ifi_lastchange[8:16][0]))
50-
}
51-
5246
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
5347
var writtenOut uint64 = 0
5448
_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0)

src/syscall/syscall_freebsd_arm.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,6 @@ func (cmsg *Cmsghdr) SetLen(length int) {
4343
cmsg.Len = uint32(length)
4444
}
4545

46-
func (d *IfData) fillEpochLastChange(data11 *ifData11Raw) {
47-
d.Epoch = *(*int64)(unsafe.Pointer(&data11.X__ifi_epoch[0]))
48-
d.Lastchange.Sec = *(*int64)(unsafe.Pointer(&data11.X__ifi_lastchange[0:8][0]))
49-
d.Lastchange.Usec = *(*int32)(unsafe.Pointer(&data11.X__ifi_lastchange[8:12][0]))
50-
}
51-
5246
func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) {
5347
var writtenOut uint64 = 0
5448
_, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0)

0 commit comments

Comments
 (0)