@@ -131,6 +131,20 @@ func (d *Decoder) Process(data []byte, ci *gopacket.CaptureInfo) (*Packet, error
131131 packet := gopacket .NewPacket (data , d .LayerType , gopacket.DecodeOptions {Lazy : true , NoCopy : true })
132132 logp .Debug ("layer" , "\n %v" , packet )
133133
134+ if greLayer := packet .Layer (layers .LayerTypeGRE ); greLayer != nil {
135+ gre , ok := greLayer .(* layers.GRE )
136+ if ! ok {
137+ return nil , nil
138+ }
139+
140+ if config .Cfg .Iface .WithErspan {
141+ packet = gopacket .NewPacket (gre .Payload [8 :], d .LayerType , gopacket.DecodeOptions {Lazy : true , NoCopy : true })
142+ } else {
143+ packet = gopacket .NewPacket (gre .Payload , d .LayerType , gopacket.DecodeOptions {Lazy : true , NoCopy : true })
144+ }
145+ logp .Debug ("layer" , "\n layer inside GRE\n %v" , packet )
146+ }
147+
134148 if dot1qLayer := packet .Layer (layers .LayerTypeDot1Q ); dot1qLayer != nil {
135149 dot1q , ok := dot1qLayer .(* layers.Dot1Q )
136150 if ! ok {
@@ -205,7 +219,9 @@ func (d *Decoder) Process(data []byte, ci *gopacket.CaptureInfo) (*Packet, error
205219 return nil , nil
206220 }
207221
208- pkt .ProtoType = 1
222+ if bytes .Contains (udp .Payload , []byte ("sip" )) {
223+ pkt .ProtoType = 1
224+ }
209225 pkt .SrcPort = uint16 (udp .SrcPort )
210226 pkt .DstPort = uint16 (udp .DstPort )
211227 pkt .Payload = udp .Payload
@@ -254,7 +270,9 @@ func (d *Decoder) Process(data []byte, ci *gopacket.CaptureInfo) (*Packet, error
254270 return nil , nil
255271 }
256272
257- pkt .ProtoType = 1
273+ if bytes .Contains (tcp .Payload , []byte ("sip" )) {
274+ pkt .ProtoType = 1
275+ }
258276 pkt .SrcPort = uint16 (tcp .SrcPort )
259277 pkt .DstPort = uint16 (tcp .DstPort )
260278 pkt .Payload = tcp .Payload
0 commit comments