From 6e97bcdf505f60c362e4ba7cc648d3b6f9e3fa18 Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Sat, 23 Jan 2021 02:19:03 +0100 Subject: decode gre protocol type --- pkg/tcpip/sample/tun_tcp_connect/main.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'pkg/tcpip/sample/tun_tcp_connect') diff --git a/pkg/tcpip/sample/tun_tcp_connect/main.go b/pkg/tcpip/sample/tun_tcp_connect/main.go index 19276aca7..e0ab521ff 100644 --- a/pkg/tcpip/sample/tun_tcp_connect/main.go +++ b/pkg/tcpip/sample/tun_tcp_connect/main.go @@ -139,15 +139,17 @@ type GreHandlerInfo struct { func (info *GreHandlerInfo) greHandler(req *gre.ForwarderRequest) { pkt := req.Pkt log.Println("greHandler: ", req.Pkt.Size(), req.Pkt.Views()) + greHdr := header.GRE(pkt.TransportHeader().View()) + proto := greHdr.ProtocolType() views := pkt.Data.Views() size := pkt.Data.Size() data := buffer.NewVectorisedView(size, views) newPkt := stack.NewPacketBuffer(stack.PacketBufferOptions{ Data: data, }) - log.Println("greHandler cloned: ", newPkt.Views()) + log.Printf("greHandler proto: %d cloned: %v", proto, newPkt.Views()) - info.ChEp.InjectInbound(header.IPv4ProtocolNumber, newPkt) + info.ChEp.InjectInbound(proto, newPkt) } func (info *GreHandlerInfo) greRead(ep *channel.Endpoint) { @@ -155,7 +157,7 @@ func (info *GreHandlerInfo) greRead(ep *channel.Endpoint) { pi, err := ep.ReadContext(context.Background()); linkHdr := pi.Pkt.LinkHeader() greHdr := header.GRE(linkHdr.Push(4)) //header.IPv4MinimumSize + 4) - greHdr.SetProtocolType(header.IPv4ProtocolNumber) + greHdr.SetProtocolType(pi.Proto) log.Printf("greRead %d %v %v %v", pi.Proto, pi, err, greHdr) opts := tcpip.WriteOptions{ //To: &info.Raddr -- cgit v1.2.3