log packet information
This commit is contained in:
parent
ce4c21154b
commit
3983700788
8
main.go
8
main.go
|
@ -42,13 +42,17 @@ func run(opt options) error {
|
||||||
buf := [4096]byte{}
|
buf := [4096]byte{}
|
||||||
var s tlv.PacketDecoder
|
var s tlv.PacketDecoder
|
||||||
for {
|
for {
|
||||||
b, src, ifindex, err := conn.ReadFrom(buf[:])
|
b, src, rcm, err := conn.ReadFrom(buf[:])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Skipping packet:", err)
|
fmt.Println("Skipping packet:", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Reset(b, src, ifindex)
|
fmt.Print("\x1B[1m")
|
||||||
|
fmt.Printf("Packet size %4d %s", len(b), rcm)
|
||||||
|
fmt.Println("\x1B[0m")
|
||||||
|
|
||||||
|
s.Reset(b, src, rcm.IfIndex)
|
||||||
for s.Scan() {
|
for s.Scan() {
|
||||||
switch t := s.TLV().(type) {
|
switch t := s.TLV().(type) {
|
||||||
case tlv.NextHop:
|
case tlv.NextHop:
|
||||||
|
|
|
@ -48,15 +48,16 @@ func (c Conn) JoinGroup(ifname string, addr string) error {
|
||||||
return c.v6pc.JoinGroup(ifi, &net.UDPAddr{IP: ip.IPAddr().IP})
|
return c.v6pc.JoinGroup(ifi, &net.UDPAddr{IP: ip.IPAddr().IP})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c Conn) ReadFrom(b []byte) (body []byte, src netaddr.IP, ifindex int, err error) {
|
func (c Conn) ReadFrom(b []byte) (body []byte, src netaddr.IP, rcm *ipv6.ControlMessage, err error) {
|
||||||
n, rcm, _, err := c.v6pc.ReadFrom(b)
|
var n int
|
||||||
|
n, rcm, _, err = c.v6pc.ReadFrom(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, netaddr.IP{}, 0, err
|
return nil, netaddr.IP{}, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
b = b[:n]
|
b = b[:n]
|
||||||
if len(b) < BabelPacketHeaderSize {
|
if len(b) < BabelPacketHeaderSize {
|
||||||
return nil, netaddr.IP{}, 0, fmt.Errorf("Packet too short: %d", len(b))
|
return nil, netaddr.IP{}, nil, fmt.Errorf("Packet too short: %d", len(b))
|
||||||
}
|
}
|
||||||
|
|
||||||
magic := b[0]
|
magic := b[0]
|
||||||
|
@ -65,22 +66,22 @@ func (c Conn) ReadFrom(b []byte) (body []byte, src netaddr.IP, ifindex int, err
|
||||||
b = b[4:]
|
b = b[4:]
|
||||||
|
|
||||||
if magic != BabelMagic {
|
if magic != BabelMagic {
|
||||||
return nil, netaddr.IP{}, 0, fmt.Errorf("Invalid magic number %d", magic)
|
return nil, netaddr.IP{}, nil, fmt.Errorf("Invalid magic number %d", magic)
|
||||||
}
|
}
|
||||||
if version != BabelVersion {
|
if version != BabelVersion {
|
||||||
return nil, netaddr.IP{}, 0, fmt.Errorf("Unsupported version number %d", version)
|
return nil, netaddr.IP{}, nil, fmt.Errorf("Unsupported version number %d", version)
|
||||||
}
|
}
|
||||||
if int(length) > len(b) {
|
if int(length) > len(b) {
|
||||||
return nil, netaddr.IP{}, 0, fmt.Errorf("Invalid length for packet of size %d: %d", n, length)
|
return nil, netaddr.IP{}, nil, fmt.Errorf("Invalid length for packet of size %d: %d", n, length)
|
||||||
}
|
}
|
||||||
|
|
||||||
var ok bool
|
var ok bool
|
||||||
src, ok = netaddr.FromStdIPRaw(rcm.Src)
|
src, ok = netaddr.FromStdIPRaw(rcm.Src)
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, netaddr.IP{}, 0, fmt.Errorf("Invalid src address %q", rcm.Src)
|
return nil, netaddr.IP{}, nil, fmt.Errorf("Invalid src address %q", rcm.Src)
|
||||||
}
|
}
|
||||||
|
|
||||||
return b, src, rcm.IfIndex, err
|
return b, src, rcm, err
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue