mirror of
https://github.com/soypat/lneto.git
synced 2026-09-10 08:39:30 +00:00
more API touch ups
This commit is contained in:
@@ -76,6 +76,10 @@ func (client *Client) Configure(cfg ClientConfig) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
func (client *Client) SetAddr6(addr [16]byte) {
|
||||||
|
client.ourIP = addr
|
||||||
|
client.Reset()
|
||||||
|
}
|
||||||
|
|
||||||
func (client *Client) Protocol() uint64 { return uint64(lneto.IPProtoIPv6ICMP) }
|
func (client *Client) Protocol() uint64 { return uint64(lneto.IPProtoIPv6ICMP) }
|
||||||
func (client *Client) LocalPort() uint16 { return 0 }
|
func (client *Client) LocalPort() uint16 { return 0 }
|
||||||
|
|||||||
+19
-1
@@ -359,6 +359,24 @@ func (s *StackAsync) Addr4() [4]byte {
|
|||||||
return s.ip4.Addr4()
|
return s.ip4.Addr4()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *StackAsync) SetAddr6(addr [16]byte) error {
|
||||||
|
if s.ipv6enabled {
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
return s.stack6.SetAddr6(addr)
|
||||||
|
}
|
||||||
|
return lneto.ErrUnsupported
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *StackAsync) Addr6() [16]byte {
|
||||||
|
if s.ipv6enabled {
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
return s.stack6.Addr6()
|
||||||
|
}
|
||||||
|
return [16]byte{}
|
||||||
|
}
|
||||||
|
|
||||||
func (s *StackAsync) SetSubnet4(addr [4]byte, prefixBits uint8) {
|
func (s *StackAsync) SetSubnet4(addr [4]byte, prefixBits uint8) {
|
||||||
s.mu.Lock()
|
s.mu.Lock()
|
||||||
defer s.mu.Unlock()
|
defer s.mu.Unlock()
|
||||||
@@ -405,7 +423,7 @@ func (s *StackAsync) EnableICMP(enabled bool) (err error) {
|
|||||||
s.icmp.Abort()
|
s.icmp.Abort()
|
||||||
}
|
}
|
||||||
if s.ipv6enabled {
|
if s.ipv6enabled {
|
||||||
if err2 := s.stack6.EnableICMP6(enabled); err2 != nil {
|
if err2 := s.stack6.EnableICMP6(enabled); err2 != nil && err == nil {
|
||||||
err = err2
|
err = err2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-2
@@ -20,7 +20,7 @@ func DefaultStack6() Stack6 {
|
|||||||
type Stack6 interface {
|
type Stack6 interface {
|
||||||
Reset6(cfg *StackConfig) error
|
Reset6(cfg *StackConfig) error
|
||||||
Addr6() [16]byte
|
Addr6() [16]byte
|
||||||
SetAddr6(addr [16]byte)
|
SetAddr6(addr [16]byte) error
|
||||||
|
|
||||||
EnableICMP6(enabled bool) error
|
EnableICMP6(enabled bool) error
|
||||||
Register6(node lneto.StackNode) error
|
Register6(node lneto.StackNode) error
|
||||||
@@ -48,7 +48,12 @@ type stack6 struct {
|
|||||||
|
|
||||||
func (s *stack6) Register6(node lneto.StackNode) error { return s.ip6.Register6(node) }
|
func (s *stack6) Register6(node lneto.StackNode) error { return s.ip6.Register6(node) }
|
||||||
func (s *stack6) Addr6() [16]byte { return s.ip6.Addr6() }
|
func (s *stack6) Addr6() [16]byte { return s.ip6.Addr6() }
|
||||||
func (s *stack6) SetAddr6(addr [16]byte) { s.ip6.SetAddr6(addr) }
|
func (s *stack6) SetAddr6(addr [16]byte) error {
|
||||||
|
s.ip6.SetAddr6(addr)
|
||||||
|
s.icmp6.SetAddr6(addr)
|
||||||
|
s.dropNDPPending()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *stack6) IPv6Stack() lneto.StackNode { return &s.ip6 }
|
func (s *stack6) IPv6Stack() lneto.StackNode { return &s.ip6 }
|
||||||
|
|
||||||
@@ -210,3 +215,10 @@ func (s *stack6) ndpDynamicResolve(raddr [16]byte) ([]byte, error) {
|
|||||||
e.macBuf = macBuf
|
e.macBuf = macBuf
|
||||||
return macBuf, nil
|
return macBuf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *stack6) dropNDPPending() {
|
||||||
|
for i := range s.ndpPending {
|
||||||
|
s.ndpPending[i].macBuf = nil
|
||||||
|
s.ndpPending[i].addr = [16]byte{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user