5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-10 02:50:27 +00:00

Use ICMPv6 NDP target instead of source address when populating peermacs

This commit is contained in:
Neil Alexander 2018-12-26 11:51:21 +00:00
parent 4e5906bf23
commit 9eeb482587
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944

View File

@ -175,10 +175,13 @@ func (i *icmpv6) parse_packet_tun(datain []byte, datamac *[]byte) ([]byte, error
case ipv6.ICMPTypeNeighborAdvertisement: case ipv6.ICMPTypeNeighborAdvertisement:
if datamac != nil { if datamac != nil {
var addr address.Address var addr address.Address
var target address.Address
var mac macAddress var mac macAddress
copy(addr[:], ipv6Header.Src[:]) copy(addr[:], ipv6Header.Src[:])
copy(target[:], datain[48:64])
copy(mac[:], (*datamac)[:]) 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.mac = mac
neighbor.learned = true neighbor.learned = true
neighbor.lastadvertisement = time.Now() neighbor.lastadvertisement = time.Now()