1// Copyright 2016 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package route 6 7import "unsafe" 8 9func (typ RIBType) parseable() bool { 10 switch typ { 11 case sysNET_RT_STATS, sysNET_RT_TABLE: 12 return false 13 default: 14 return true 15 } 16} 17 18// RouteMetrics represents route metrics. 19type RouteMetrics struct { 20 PathMTU int // path maximum transmission unit 21} 22 23// SysType implements the SysType method of Sys interface. 24func (rmx *RouteMetrics) SysType() SysType { return SysMetrics } 25 26// Sys implements the Sys method of Message interface. 27func (m *RouteMessage) Sys() []Sys { 28 return []Sys{ 29 &RouteMetrics{ 30 PathMTU: int(nativeEndian.Uint32(m.raw[60:64])), 31 }, 32 } 33} 34 35// InterfaceMetrics represents interface metrics. 36type InterfaceMetrics struct { 37 Type int // interface type 38 MTU int // maximum transmission unit 39} 40 41// SysType implements the SysType method of Sys interface. 42func (imx *InterfaceMetrics) SysType() SysType { return SysMetrics } 43 44// Sys implements the Sys method of Message interface. 45func (m *InterfaceMessage) Sys() []Sys { 46 return []Sys{ 47 &InterfaceMetrics{ 48 Type: int(m.raw[24]), 49 MTU: int(nativeEndian.Uint32(m.raw[28:32])), 50 }, 51 } 52} 53 54func probeRoutingStack() (int, map[int]*wireFormat) { 55 var p uintptr 56 rtm := &wireFormat{extOff: -1, bodyOff: -1} 57 rtm.parse = rtm.parseRouteMessage 58 ifm := &wireFormat{extOff: -1, bodyOff: -1} 59 ifm.parse = ifm.parseInterfaceMessage 60 ifam := &wireFormat{extOff: -1, bodyOff: -1} 61 ifam.parse = ifam.parseInterfaceAddrMessage 62 ifanm := &wireFormat{extOff: -1, bodyOff: -1} 63 ifanm.parse = ifanm.parseInterfaceAnnounceMessage 64 return int(unsafe.Sizeof(p)), map[int]*wireFormat{ 65 sysRTM_ADD: rtm, 66 sysRTM_DELETE: rtm, 67 sysRTM_CHANGE: rtm, 68 sysRTM_GET: rtm, 69 sysRTM_LOSING: rtm, 70 sysRTM_REDIRECT: rtm, 71 sysRTM_MISS: rtm, 72 sysRTM_LOCK: rtm, 73 sysRTM_RESOLVE: rtm, 74 sysRTM_NEWADDR: ifam, 75 sysRTM_DELADDR: ifam, 76 sysRTM_IFINFO: ifm, 77 sysRTM_IFANNOUNCE: ifanm, 78 sysRTM_DESYNC: rtm, 79 } 80} 81