package route
import (
)
func ( *RouteMessage) () ([]byte, error) {
, := wireFormats[.Type]
if ! {
return nil, errUnsupportedMessage
}
:= .bodyOff + addrsSpace(.Addrs)
if runtime.GOOS == "darwin" || runtime.GOOS == "ios" {
+= 1024
}
:= make([]byte, )
nativeEndian.PutUint16([:2], uint16())
if .Version == 0 {
[2] = rtmVersion
} else {
[2] = byte(.Version)
}
[3] = byte(.Type)
nativeEndian.PutUint32([8:12], uint32(.Flags))
nativeEndian.PutUint16([4:6], uint16(.Index))
nativeEndian.PutUint32([16:20], uint32(.ID))
nativeEndian.PutUint32([20:24], uint32(.Seq))
, := marshalAddrs([.bodyOff:], .Addrs)
if != nil {
return nil,
}
if > 0 {
nativeEndian.PutUint32([12:16], uint32())
}
return , nil
}
func ( *wireFormat) ( RIBType, []byte) (Message, error) {
if len() < .bodyOff {
return nil, errMessageTooShort
}
:= int(nativeEndian.Uint16([:2]))
if len() < {
return nil, errInvalidMessage
}
:= &RouteMessage{
Version: int([2]),
Type: int([3]),
Flags: int(nativeEndian.Uint32([8:12])),
Index: int(nativeEndian.Uint16([4:6])),
ID: uintptr(nativeEndian.Uint32([16:20])),
Seq: int(nativeEndian.Uint32([20:24])),
extOff: .extOff,
raw: [:],
}
:= syscall.Errno(nativeEndian.Uint32([28:32]))
if != 0 {
.Err =
}
var error
.Addrs, = parseAddrs(uint(nativeEndian.Uint32([12:16])), parseKernelInetAddr, [.bodyOff:])
if != nil {
return nil,
}
return , nil
}