aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/syscall/route_bsd.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/syscall/route_bsd.go')
-rw-r--r--libgo/go/syscall/route_bsd.go41
1 files changed, 16 insertions, 25 deletions
diff --git a/libgo/go/syscall/route_bsd.go b/libgo/go/syscall/route_bsd.go
index e17d976..62c5ce1 100644
--- a/libgo/go/syscall/route_bsd.go
+++ b/libgo/go/syscall/route_bsd.go
@@ -8,9 +8,7 @@
package syscall
-import (
- "unsafe"
-)
+import "unsafe"
// Round the length of a raw sockaddr up to align it properly.
func rsaAlignOf(salen int) int {
@@ -31,7 +29,6 @@ func rsaAlignOf(salen int) int {
// parameters.
func RouteRIB(facility, param int) ([]byte, error) {
mib := []_C_int{CTL_NET, AF_ROUTE, 0, 0, _C_int(facility), _C_int(param)}
-
// Find size.
n := uintptr(0)
if err := sysctl(mib, nil, &n, nil, 0); err != nil {
@@ -40,12 +37,10 @@ func RouteRIB(facility, param int) ([]byte, error) {
if n == 0 {
return nil, nil
}
-
tab := make([]byte, n)
if err := sysctl(mib, &tab[0], &n, nil, 0); err != nil {
return nil, err
}
-
return tab[:n], nil
}
@@ -76,13 +71,12 @@ func (m *RouteMessage) sockaddr() []Sockaddr {
af int
sas [4]Sockaddr
)
-
- buf := m.Data[:]
+ b := m.Data[:]
for i := uint(0); i < RTAX_MAX; i++ {
if m.Header.Addrs&rtaRtMask&(1<<i) == 0 {
continue
}
- rsa := (*RawSockaddr)(unsafe.Pointer(&buf[0]))
+ rsa := (*RawSockaddr)(unsafe.Pointer(&b[0]))
switch i {
case RTAX_DST, RTAX_GATEWAY:
sa, err := anyToSockaddr((*RawSockaddrAny)(unsafe.Pointer(rsa)))
@@ -96,14 +90,14 @@ func (m *RouteMessage) sockaddr() []Sockaddr {
case RTAX_NETMASK, RTAX_GENMASK:
switch af {
case AF_INET:
- rsa4 := (*RawSockaddrInet4)(unsafe.Pointer(&buf[0]))
+ rsa4 := (*RawSockaddrInet4)(unsafe.Pointer(&b[0]))
sa := new(SockaddrInet4)
for j := 0; rsa4.Len > 0 && j < int(rsa4.Len)-int(unsafe.Offsetof(rsa4.Addr)); j++ {
sa.Addr[j] = rsa4.Addr[j]
}
sas[i] = sa
case AF_INET6:
- rsa6 := (*RawSockaddrInet6)(unsafe.Pointer(&buf[0]))
+ rsa6 := (*RawSockaddrInet6)(unsafe.Pointer(&b[0]))
sa := new(SockaddrInet6)
for j := 0; rsa6.Len > 0 && j < int(rsa6.Len)-int(unsafe.Offsetof(rsa6.Addr)); j++ {
sa.Addr[j] = rsa6.Addr[j]
@@ -111,9 +105,8 @@ func (m *RouteMessage) sockaddr() []Sockaddr {
sas[i] = sa
}
}
- buf = buf[rsaAlignOf(int(rsa.Len)):]
+ b = b[rsaAlignOf(int(rsa.Len)):]
}
-
return sas[:]
}
@@ -148,13 +141,12 @@ func (m *InterfaceAddrMessage) sockaddr() (sas []Sockaddr) {
if m.Header.Addrs&rtaIfaMask == 0 {
return nil
}
-
- buf := m.Data[:]
+ b := m.Data[:]
for i := uint(0); i < RTAX_MAX; i++ {
if m.Header.Addrs&rtaIfaMask&(1<<i) == 0 {
continue
}
- rsa := (*RawSockaddr)(unsafe.Pointer(&buf[0]))
+ rsa := (*RawSockaddr)(unsafe.Pointer(&b[0]))
switch i {
case RTAX_IFA:
sa, err := anyToSockaddr((*RawSockaddrAny)(unsafe.Pointer(rsa)))
@@ -174,22 +166,21 @@ func (m *InterfaceAddrMessage) sockaddr() (sas []Sockaddr) {
case RTAX_BRD:
// nothing to do
}
- buf = buf[rsaAlignOf(int(rsa.Len)):]
+ b = b[rsaAlignOf(int(rsa.Len)):]
}
-
return sas
}
-// ParseRoutingMessage parses buf as routing messages and returns
-// the slice containing the RoutingMessage interfaces.
-func ParseRoutingMessage(buf []byte) (msgs []RoutingMessage, err error) {
- for len(buf) >= anyMessageLen {
- any := (*anyMessage)(unsafe.Pointer(&buf[0]))
+// ParseRoutingMessage parses b as routing messages and returns the
+// slice containing the RoutingMessage interfaces.
+func ParseRoutingMessage(b []byte) (msgs []RoutingMessage, err error) {
+ for len(b) >= anyMessageLen {
+ any := (*anyMessage)(unsafe.Pointer(&b[0]))
if any.Version != RTM_VERSION {
return nil, EINVAL
}
- msgs = append(msgs, any.toRoutingMessage(buf))
- buf = buf[any.Msglen:]
+ msgs = append(msgs, any.toRoutingMessage(b))
+ b = b[any.Msglen:]
}
return msgs, nil
}