From 9eeb48258741aa8a72d95ec3e097deb281a73dcf Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 26 Dec 2018 11:51:21 +0000 Subject: [PATCH 1/3] Use ICMPv6 NDP target instead of source address when populating peermacs --- src/yggdrasil/icmpv6.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/yggdrasil/icmpv6.go b/src/yggdrasil/icmpv6.go index baae3ab..a8d4e6d 100644 --- a/src/yggdrasil/icmpv6.go +++ b/src/yggdrasil/icmpv6.go @@ -175,10 +175,13 @@ func (i *icmpv6) parse_packet_tun(datain []byte, datamac *[]byte) ([]byte, error case ipv6.ICMPTypeNeighborAdvertisement: if datamac != nil { var addr address.Address + var target address.Address var mac macAddress copy(addr[:], ipv6Header.Src[:]) + copy(target[:], datain[48:64]) copy(mac[:], (*datamac)[:]) - neighbor := i.peermacs[addr] + // i.tun.core.log.Println("Learning peer MAC", mac, "for", target) + neighbor := i.peermacs[target] neighbor.mac = mac neighbor.learned = true neighbor.lastadvertisement = time.Now() From b3d6c9a38560ac54724d3566c9396bb37b42992f Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 26 Dec 2018 11:57:08 +0000 Subject: [PATCH 2/3] Print when peermacs learned --- src/yggdrasil/icmpv6.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/yggdrasil/icmpv6.go b/src/yggdrasil/icmpv6.go index a8d4e6d..a34fa21 100644 --- a/src/yggdrasil/icmpv6.go +++ b/src/yggdrasil/icmpv6.go @@ -180,7 +180,7 @@ func (i *icmpv6) parse_packet_tun(datain []byte, datamac *[]byte) ([]byte, error copy(addr[:], ipv6Header.Src[:]) copy(target[:], datain[48:64]) copy(mac[:], (*datamac)[:]) - // i.tun.core.log.Println("Learning peer MAC", mac, "for", target) + i.tun.core.log.Printf("Learning peer MAC %x for %x\n", mac, target) neighbor := i.peermacs[target] neighbor.mac = mac neighbor.learned = true From 74692b689abb56fbca4fbcf4290693ad84c26e35 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 26 Dec 2018 12:25:28 +0000 Subject: [PATCH 3/3] Fix OpenBSD (tested and working on 6.4) --- src/yggdrasil/icmpv6.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/yggdrasil/icmpv6.go b/src/yggdrasil/icmpv6.go index a34fa21..fc037fc 100644 --- a/src/yggdrasil/icmpv6.go +++ b/src/yggdrasil/icmpv6.go @@ -180,12 +180,12 @@ func (i *icmpv6) parse_packet_tun(datain []byte, datamac *[]byte) ([]byte, error copy(addr[:], ipv6Header.Src[:]) copy(target[:], datain[48:64]) copy(mac[:], (*datamac)[:]) - i.tun.core.log.Printf("Learning peer MAC %x for %x\n", mac, target) + // i.tun.core.log.Printf("Learning peer MAC %x for %x\n", mac, target) neighbor := i.peermacs[target] neighbor.mac = mac neighbor.learned = true neighbor.lastadvertisement = time.Now() - i.peermacs[addr] = neighbor + i.peermacs[target] = neighbor } return nil, errors.New("No response needed") }