func decodeLinuxSLL(data []byte, p gopacket.PacketBuilder) error { sll := &LinuxSLL{} if err := sll.DecodeFromBytes(data, p); err != nil { return err } p.AddLayer(sll) p.SetLinkLayer(sll) return p.NextDecoder(sll.EthernetType) }
func decodeEthernet(data []byte, p gopacket.PacketBuilder) error { eth := &Ethernet{} err := eth.DecodeFromBytes(data, p) if err != nil { return err } p.AddLayer(eth) p.SetLinkLayer(eth) return p.NextDecoder(eth.EthernetType) }
func decodeFDDI(data []byte, p gopacket.PacketBuilder) error { f := &FDDI{ FrameControl: FDDIFrameControl(data[0] & 0xF8), Priority: data[0] & 0x07, SrcMAC: net.HardwareAddr(data[1:7]), DstMAC: net.HardwareAddr(data[7:13]), BaseLayer: BaseLayer{data[:13], data[13:]}, } p.SetLinkLayer(f) p.AddLayer(f) return p.NextDecoder(f.FrameControl) }
func decodePPP(data []byte, p gopacket.PacketBuilder) error { ppp := &PPP{} if data[0]&0x1 == 0 { if data[1]&0x1 == 0 { return errors.New("PPP has invalid type") } ppp.PPPType = PPPType(binary.BigEndian.Uint16(data[:2])) ppp.Contents = data[:2] ppp.Payload = data[2:] } else { ppp.PPPType = PPPType(data[0]) ppp.Contents = data[:1] ppp.Payload = data[1:] } p.AddLayer(ppp) p.SetLinkLayer(ppp) return p.NextDecoder(ppp.PPPType) }