aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/net
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2012-04-20 20:11:28 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2012-04-20 20:11:28 +0000
commitd25a12fc2db00476f358d2a66ab1e30a7bfa4b9a (patch)
tree008ea10059bb6030b63b115261d375197090725c /libgo/go/net
parent63d1e46df06893b073418be4e27f95eebd05ba26 (diff)
downloadgcc-d25a12fc2db00476f358d2a66ab1e30a7bfa4b9a.zip
gcc-d25a12fc2db00476f358d2a66ab1e30a7bfa4b9a.tar.gz
gcc-d25a12fc2db00476f358d2a66ab1e30a7bfa4b9a.tar.bz2
net, syscall: Use native endianness for GNU/Linux netlink code.
From-SVN: r186640
Diffstat (limited to 'libgo/go/net')
-rw-r--r--libgo/go/net/interface_linux.go17
1 files changed, 6 insertions, 11 deletions
diff --git a/libgo/go/net/interface_linux.go b/libgo/go/net/interface_linux.go
index 0d7017f..ce2e921 100644
--- a/libgo/go/net/interface_linux.go
+++ b/libgo/go/net/interface_linux.go
@@ -64,11 +64,7 @@ func newLink(ifim *syscall.IfInfomsg, attrs []syscall.NetlinkRouteAttr) Interfac
case syscall.IFLA_IFNAME:
ifi.Name = string(a.Value[:len(a.Value)-1])
case syscall.IFLA_MTU:
- if syscall.BigEndian {
- ifi.MTU = int(uint32(a.Value[0])<<24 | uint32(a.Value[1])<<16 | uint32(a.Value[2])<<8 | uint32(a.Value[3]))
- } else {
- ifi.MTU = int(uint32(a.Value[3])<<24 | uint32(a.Value[2])<<16 | uint32(a.Value[1])<<8 | uint32(a.Value[0]))
- }
+ ifi.MTU = int(*(*uint32)(unsafe.Pointer(&a.Value[:4][0])))
}
}
return ifi
@@ -197,15 +193,14 @@ func parseProcNetIGMP(path string, ifi *Interface) []Addr {
name = f[1]
case len(f[0]) == 8:
if ifi == nil || name == ifi.Name {
+ // The Linux kernel puts the IP
+ // address in /proc/net/igmp in native
+ // endianness.
for i := 0; i+1 < len(f[0]); i += 2 {
b[i/2], _ = xtoi2(f[0][i:i+2], 0)
}
- var ifma IPAddr
- if syscall.BigEndian {
- ifma = IPAddr{IP: IPv4(b[0], b[1], b[2], b[3])}
- } else {
- ifma = IPAddr{IP: IPv4(b[3], b[2], b[1], b[0])}
- }
+ i := *(*uint32)(unsafe.Pointer(&b[:4][0]))
+ ifma := IPAddr{IP: IPv4(byte(i>>24), byte(i>>16), byte(i>>8), byte(i))}
ifmat = append(ifmat, ifma.toAddr())
}
}