URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgo/] [go/] [syscall/] [route_freebsd.go] - Rev 747
Compare with Previous | Blame | View Log
// Copyright 2011 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.// Routing sockets and messages for FreeBSDpackage syscallimport ("unsafe")func (any *anyMessage) toRoutingMessage(buf []byte) RoutingMessage {switch any.Type {case RTM_ADD, RTM_DELETE, RTM_CHANGE, RTM_GET, RTM_LOSING, RTM_REDIRECT, RTM_MISS, RTM_LOCK, RTM_RESOLVE:p := (*RouteMessage)(unsafe.Pointer(any))rtm := &RouteMessage{}rtm.Header = p.Headerrtm.Data = buf[SizeofRtMsghdr:any.Msglen]return rtmcase RTM_IFINFO:p := (*InterfaceMessage)(unsafe.Pointer(any))ifm := &InterfaceMessage{}ifm.Header = p.Headerifm.Data = buf[SizeofIfMsghdr:any.Msglen]return ifmcase RTM_NEWADDR, RTM_DELADDR:p := (*InterfaceAddrMessage)(unsafe.Pointer(any))ifam := &InterfaceAddrMessage{}ifam.Header = p.Headerifam.Data = buf[SizeofIfaMsghdr:any.Msglen]return ifamcase RTM_NEWMADDR, RTM_DELMADDR:p := (*InterfaceMulticastAddrMessage)(unsafe.Pointer(any))ifmam := &InterfaceMulticastAddrMessage{}ifmam.Header = p.Headerifmam.Data = buf[SizeofIfmaMsghdr:any.Msglen]return ifmam}return nil}// InterfaceMulticastAddrMessage represents a routing message// containing network interface address entries.type InterfaceMulticastAddrMessage struct {Header IfmaMsghdrData []byte}const rtaIfmaMask = RTA_GATEWAY | RTA_IFP | RTA_IFAfunc (m *InterfaceMulticastAddrMessage) sockaddr() (sas []Sockaddr) {if m.Header.Addrs&rtaIfmaMask == 0 {return nil}buf := m.Data[:]for i := uint(0); i < RTAX_MAX; i++ {if m.Header.Addrs&rtaIfmaMask&(1<<i) == 0 {continue}rsa := (*RawSockaddr)(unsafe.Pointer(&buf[0]))switch i {case RTAX_IFA:sa, e := anyToSockaddr((*RawSockaddrAny)(unsafe.Pointer(rsa)))if e != nil {return nil}sas = append(sas, sa)case RTAX_GATEWAY, RTAX_IFP:// nothing to do}buf = buf[rsaAlignOf(int(rsa.Len)):]}return sas}
