github.com/gopacket/gopacket@v1.1.0/routing/common.go (about) 1 // Copyright 2012 Google, Inc. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style license 4 // that can be found in the LICENSE file in the root of the source 5 // tree. 6 7 package routing 8 9 import ( 10 "net" 11 ) 12 13 // Router implements simple IPv4/IPv6 routing based on the kernel's routing 14 // table. This routing library has very few features and may actually route 15 // incorrectly in some cases, but it should work the majority of the time. 16 type Router interface { 17 // Route returns where to route a packet based on the packet's source 18 // and destination IP address. 19 // 20 // Callers may pass in nil for src, in which case the src is treated as 21 // either 0.0.0.0 or ::, depending on whether dst is a v4 or v6 address. 22 // 23 // It returns the interface on which to send the packet, the gateway IP 24 // to send the packet to (if necessary), the preferred src IP to use (if 25 // available). If the preferred src address is not given in the routing 26 // table, the first IP address of the interface is provided. 27 // 28 // If an error is encountered, iface, geteway, and 29 // preferredSrc will be nil, and err will be set. 30 Route(dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) 31 32 // RouteWithSrc routes based on source information as well as destination 33 // information. Either or both of input/src can be nil. If both are, this 34 // should behave exactly like Route(dst) 35 RouteWithSrc(input net.HardwareAddr, src, dst net.IP) (iface *net.Interface, gateway, preferredSrc net.IP, err error) 36 }