func (p *Packet) SetPayload(pl packet.Packet) error { p.pkt_payload = pl p.Protocol = TypeToProtocol(pl.GetType()) p.Length = p.GetLength() pl.InitChecksum(p.pseudo_checksum()) return nil }
func (p *Packet) SetPayload(pl packet.Packet) error { p.pkt_payload = pl p.Type = TypeToEtherType(pl.GetType()) if p.Type < 0x0600 { p.Length = p.GetLength() } return nil }
func (p *Packet) Answers(other packet.Packet) bool { if other == nil || other.GetType() != packet.ICMPv6 { return false } if other.(*Packet).Type == EchoRequest && p.Type == EchoReply { return true } return false }
// Return the first layer of the given type in the packet. If no suitable layer // is found, return nil. func FindLayer(p packet.Packet, layer packet.Type) packet.Packet { switch { case p == nil: return nil case p.GetType() == layer: return p default: return FindLayer(p.Payload(), layer) } }
func (p *Packet) Answers(other packet.Packet) bool { if other == nil || other.GetType() != packet.TCP { return false } if p.SrcPort != other.(*Packet).DstPort || p.DstPort != other.(*Packet).SrcPort { return false } return true }
func (p *Packet) Answers(other packet.Packet) bool { if other == nil || other.GetType() != packet.ARP { return false } if p.Operation == Reply && other.(*Packet).Operation == Request && p.ProtoSrcAddr.Equal(other.(*Packet).ProtoDstAddr) { return true } return false }
func (p *Packet) Answers(other packet.Packet) bool { if other == nil || other.GetType() != packet.ICMPv4 { return false } if (other.(*Packet).Type == EchoRequest && p.Type == EchoReply) || (other.(*Packet).Type == Timestamp && p.Type == TimestampReply) || (other.(*Packet).Type == InfoRequest && p.Type == InfoReply) || (other.(*Packet).Type == AddrMaskRequest && p.Type == AddrMaskReply) { return (other.(*Packet).Seq == p.Seq) && (other.(*Packet).Id == p.Id) } return false }
func (p *Packet) Answers(other packet.Packet) bool { if other == nil || other.GetType() != packet.Eth { return false } if p.Type != other.(*Packet).Type { return false } if p.Payload() != nil { return p.Payload().Answers(other.Payload()) } return true }
func (p *Packet) Answers(other packet.Packet) bool { if other == nil { return false } if other.GetType() == packet.VLAN && p.VLAN != other.(*Packet).VLAN { return false } if p.Payload() != nil { return p.Payload().Answers(other.Payload()) } return true }
func (p *Packet) Answers(other packet.Packet) bool { if other == nil || other.GetType() != packet.IPv6 { return false } /* TODO: check link-local broadcast addresses */ if !p.DstAddr.Equal(other.(*Packet).SrcAddr) { return false } /* TODO: check ICMPv6 errors */ if p.Payload() != nil { return p.Payload().Answers(other.Payload()) } return true }
func (p *Packet) Answers(other packet.Packet) bool { if other == nil || other.GetType() != packet.IPv4 { return false } if p.Payload() != nil && p.Payload().GetType() == packet.ICMPv4 && p.Payload().Payload() != nil { return p.Payload().Payload().Equals(other) } if !p.SrcAddr.Equal(other.(*Packet).DstAddr) || p.Protocol != other.(*Packet).Protocol { return false } if p.Payload() != nil { return p.Payload().Answers(other.Payload()) } return true }
func (p *Packet) SetPayload(pl packet.Packet) error { p.pkt_payload = pl p.Type = eth.TypeToEtherType(pl.GetType()) return nil }