allow router to be started w/o capture/inject interface

useful for testing of the control plane
This commit is contained in:
Matthias Radestock committed 2015-04-02 09:46:29 +01:00
1 parent e33d2eaf8e
commit e97a3f88aa
2 files changed
+25 -15

No files matched your search

+16 -7
View File
@@ -73,17 +73,24 @@ func NewRouter(iface *net.Interface, name PeerName, nickName string, password []
func (router *Router) Start() {
// we need two pcap handles since they aren't thread-safe
pio, err := NewPcapIO(router.Iface.Name, router.BufSz)
checkFatal(err)
po, err := NewPcapO(router.Iface.Name)
checkFatal(err)
var pio PacketSourceSink
var po PacketSink
var err error
if router.Iface != nil {
pio, err = NewPcapIO(router.Iface.Name, router.BufSz)
checkFatal(err)
po, err = NewPcapO(router.Iface.Name)
checkFatal(err)
}
router.Ourself.Start()
router.Macs.Start()
router.Routes.Start()
router.ConnectionMaker.Start()
router.UDPListener = router.listenUDP(Port, po)
router.listenTCP(Port)
router.sniff(pio)
if pio != nil {
router.sniff(pio)
}
}
func (router *Router) UsingPassword() bool {
@@ -310,8 +317,10 @@ func (router *Router) handleUDPPacketFunc(dec *EthernetDecoder, sender *net.UDPA
if router.Macs.Enter(srcMac, srcPeer) {
log.Println("Discovered remote MAC", srcMac, "at", srcPeer.FullName())
}
router.LogFrame("Injecting", frame, &dec.eth)
checkWarn(po.WritePacket(frame))
if po != nil {
router.LogFrame("Injecting", frame, &dec.eth)
checkWarn(po.WritePacket(frame))
}
dstPeer, found = router.Macs.Lookup(dstMac)
if !found || dstPeer != router.Ourself.Peer {
+9 -8
View File
@@ -49,7 +49,7 @@ func main() {
)
flag.BoolVar(&justVersion, "version", false, "print version and exit")
flag.StringVar(&ifaceName, "iface", "", "name of interface to read from")
flag.StringVar(&ifaceName, "iface", "", "name of interface to capture/inject from (disabled if left blank)")
flag.StringVar(&routerName, "name", "", "name of router (defaults to MAC)")
flag.StringVar(&nickName, "nickname", "", "nickname of peer (defaults to hostname)")
flag.StringVar(&password, "password", "", "network password")
@@ -77,13 +77,14 @@ func main() {
log.Println("Command line options:", options)
log.Println("Command line peers:", peers)
if ifaceName == "" {
fmt.Println("Missing required parameter 'iface'")
os.Exit(1)
}
iface, err := weavenet.EnsureInterface(ifaceName, wait)
if err != nil {
log.Fatal(err)
var err error
var iface *net.Interface
if ifaceName != "" {
iface, err = weavenet.EnsureInterface(ifaceName, wait)
if err != nil {
log.Fatal(err)
}
}
if routerName == "" {