增加 macvtap 模式支持

This commit is contained in:
bjdgyc
2021-08-12 18:17:20 +08:00
parent 5010d2ecbd
commit 903554533b
19 changed files with 295 additions and 125 deletions

View File

@@ -4,6 +4,8 @@ import (
"net"
"sync"
"time"
"github.com/bjdgyc/anylink/pkg/utils"
)
const (
@@ -16,7 +18,7 @@ const (
)
var (
table = make(map[string]*Addr)
table = make(map[string]*Addr, 128)
tableMu sync.RWMutex
)
@@ -40,25 +42,25 @@ func Lookup(ip net.IP, onlyTable bool) *Addr {
// Add adds a IP-MAC map to a runtime ARP table.
func tableLookup(ip net.IP) *Addr {
tableMu.Lock()
tableMu.RLock()
addr := table[ip.To4().String()]
tableMu.Unlock()
tableMu.RUnlock()
if addr == nil {
return nil
}
// 判断老化过期时间
tsub := time.Since(addr.disTime)
tSub := utils.NowSec().Sub(addr.disTime)
switch addr.Type {
case TypeStatic:
case TypeNormal:
if tsub > StaleTimeNormal {
if tSub > StaleTimeNormal {
return nil
}
case TypeUnreachable:
if tsub > StaleTimeUnreachable {
if tSub > StaleTimeUnreachable {
return nil
}
case TypeStatic:
}
return addr
@@ -70,7 +72,7 @@ func Add(addr *Addr) {
return
}
if addr.disTime.IsZero() {
addr.disTime = time.Now()
addr.disTime = utils.NowSec()
}
ip := addr.IP.To4().String()
tableMu.Lock()

View File

@@ -19,7 +19,8 @@ func doLookup(ip net.IP) *Addr {
err := doPing(ip.String())
if err != nil {
// log.Println(err)
addr := &Addr{IP: ip, Type: TypeUnreachable}
addr := &Addr{IP: net.IPv4(1, 2, 3, 4), Type: TypeUnreachable}
copy(addr.IP, ip)
return addr
}
@@ -50,7 +51,9 @@ func doArpShow(ip net.IP) *Addr {
return nil
}
return &Addr{IP: ip, HardwareAddr: mac}
addr := &Addr{IP: net.IPv4(1, 2, 3, 4), HardwareAddr: mac}
copy(addr.IP, ip)
return addr
}
// IP address HW type Flags HW address Mask Device

17
server/pkg/utils/ip.go Normal file
View File

@@ -0,0 +1,17 @@
package utils
import (
"encoding/binary"
"net"
)
func Long2ip(i uint32) net.IP {
ip := make([]byte, 4)
binary.BigEndian.PutUint32(ip, i)
return ip
}
func Ip2long(ip net.IP) uint32 {
ip = ip.To4()
return binary.BigEndian.Uint32(ip)
}