1
0
mirror of https://github.com/fumiama/WireGold.git synced 2026-06-04 23:40:26 +08:00

完善 router

This commit is contained in:
fumiama
2021-12-28 16:18:16 +08:00
parent d05d6d9a9e
commit f0956ae742
3 changed files with 21 additions and 3 deletions

View File

@@ -62,6 +62,7 @@ func (p *Packet) FillHash() {
p.Hash = *(*[32]byte)(*(*unsafe.Pointer)(unsafe.Pointer(&sum)))
}
// IsVaildHash 验证 packet 合法性
func (p *Packet) IsVaildHash() bool {
sum := blake2b.New256().Sum(p.Data)
return *(*[32]byte)(*(*unsafe.Pointer)(unsafe.Pointer(&sum))) == p.Hash

View File

@@ -17,6 +17,8 @@ type Me struct {
privKey [32]byte
// 本机虚拟 ip
me net.IP
// 本机子网
subnet net.IPNet
// 本机 endpoint
myend *net.UDPAddr
// 本机活跃的所有连接
@@ -30,14 +32,19 @@ type Me struct {
}
// NewMe 设置本机参数
func NewMe(privateKey *[32]byte, myIP string, myEndpoint string) (m Me) {
func NewMe(privateKey *[32]byte, myipwithmask string, myEndpoint string) (m Me) {
m.privKey = *privateKey
var err error
m.myend, err = net.ResolveUDPAddr("udp", myEndpoint)
if err != nil {
panic(err)
}
m.me = net.ParseIP(myIP)
ip, cidr, err := net.ParseCIDR(myipwithmask)
if err != nil {
panic(err)
}
m.me = ip
m.subnet = *cidr
m.myconn, err = m.listen()
if err != nil {
panic(err)

View File

@@ -1,6 +1,7 @@
package link
import (
"encoding/binary"
"net"
"sync"
@@ -26,7 +27,7 @@ func (l *Link) Accept(ip net.IP) bool {
// IsToMe 判断是否是发给自己的包
func (l *Link) IsToMe(ip net.IP) bool {
return ip.Equal(l.me.me)
return ip.Equal(l.me.me) || ip.Equal(net.IPv4bcast) || isSubnetBcast(ip, &l.me.subnet)
}
// SetDefault 设置默认网关
@@ -69,3 +70,12 @@ func (r *Router) SetItem(ip *net.IPNet, l *Link) {
}
r.mu.Unlock()
}
func isSubnetBcast(ip net.IP, subnet *net.IPNet) bool {
if !subnet.Contains(ip) {
return false
}
maskr := make(net.IPMask, 4)
binary.LittleEndian.PutUint32(maskr[:], ^binary.LittleEndian.Uint32(subnet.Mask))
return ip.Mask(maskr).Equal(net.IP(maskr))
}