Skip to content

Commit bad2e8e

Browse files
committed
TUN-6666: Define packet package
This package defines IP and ICMP packet, decoders, encoder and flow
1 parent 20ed755 commit bad2e8e

File tree

242 files changed

+49762
-2643
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

242 files changed

+49762
-2643
lines changed

connection/quic.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"github.com/cloudflare/cloudflared/datagramsession"
2222
"github.com/cloudflare/cloudflared/ingress"
23+
"github.com/cloudflare/cloudflared/packet"
2324
quicpogs "github.com/cloudflare/cloudflared/quic"
2425
"github.com/cloudflare/cloudflared/tracing"
2526
tunnelpogs "github.com/cloudflare/cloudflared/tunnelrpc/pogs"
@@ -66,9 +67,9 @@ func NewQUICConnection(
6667
return nil, &EdgeQuicDialError{Cause: err}
6768
}
6869

69-
demuxChan := make(chan *quicpogs.SessionDatagram, demuxChanCapacity)
70+
demuxChan := make(chan *packet.Session, demuxChanCapacity)
7071
datagramMuxer := quicpogs.NewDatagramMuxer(session, logger, demuxChan)
71-
sessionManager := datagramsession.NewManager(logger, datagramMuxer.MuxSession, demuxChan)
72+
sessionManager := datagramsession.NewManager(logger, datagramMuxer.SendToSession, demuxChan)
7273

7374
return &QUICConnection{
7475
session: session,

datagramsession/manager.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/google/uuid"
1010
"github.com/rs/zerolog"
1111

12-
quicpogs "github.com/cloudflare/cloudflared/quic"
12+
"github.com/cloudflare/cloudflared/packet"
1313
)
1414

1515
const (
@@ -37,15 +37,15 @@ type manager struct {
3737
registrationChan chan *registerSessionEvent
3838
unregistrationChan chan *unregisterSessionEvent
3939
sendFunc transportSender
40-
receiveChan <-chan *quicpogs.SessionDatagram
40+
receiveChan <-chan *packet.Session
4141
closedChan <-chan struct{}
4242
sessions map[uuid.UUID]*Session
4343
log *zerolog.Logger
4444
// timeout waiting for an API to finish. This can be overriden in test
4545
timeout time.Duration
4646
}
4747

48-
func NewManager(log *zerolog.Logger, sendF transportSender, receiveChan <-chan *quicpogs.SessionDatagram) *manager {
48+
func NewManager(log *zerolog.Logger, sendF transportSender, receiveChan <-chan *packet.Session) *manager {
4949
return &manager{
5050
registrationChan: make(chan *registerSessionEvent),
5151
unregistrationChan: make(chan *unregisterSessionEvent),
@@ -163,7 +163,7 @@ func (m *manager) unregisterSession(unregistration *unregisterSessionEvent) {
163163
}
164164
}
165165

166-
func (m *manager) sendToSession(datagram *quicpogs.SessionDatagram) {
166+
func (m *manager) sendToSession(datagram *packet.Session) {
167167
session, ok := m.sessions[datagram.ID]
168168
if !ok {
169169
m.log.Error().Str("sessionID", datagram.ID.String()).Msg("session not found")

datagramsession/manager_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"github.com/stretchr/testify/require"
1616
"golang.org/x/sync/errgroup"
1717

18-
quicpogs "github.com/cloudflare/cloudflared/quic"
18+
"github.com/cloudflare/cloudflared/packet"
1919
)
2020

2121
var (
@@ -29,7 +29,7 @@ func TestManagerServe(t *testing.T) {
2929
remoteUnregisterMsg = "eyeball closed connection"
3030
)
3131

32-
requestChan := make(chan *quicpogs.SessionDatagram)
32+
requestChan := make(chan *packet.Session)
3333
transport := mockQUICTransport{
3434
sessions: make(map[uuid.UUID]chan []byte),
3535
}
@@ -241,9 +241,9 @@ type mockQUICTransport struct {
241241
sessions map[uuid.UUID]chan []byte
242242
}
243243

244-
func (me *mockQUICTransport) MuxSession(id uuid.UUID, payload []byte) error {
245-
session := me.sessions[id]
246-
session <- payload
244+
func (me *mockQUICTransport) MuxSession(session *packet.Session) error {
245+
s := me.sessions[session.ID]
246+
s <- session.Payload
247247
return nil
248248
}
249249

@@ -255,9 +255,9 @@ type mockEyeballSession struct {
255255
respReceiver <-chan []byte
256256
}
257257

258-
func (me *mockEyeballSession) serve(ctx context.Context, requestChan chan *quicpogs.SessionDatagram) error {
258+
func (me *mockEyeballSession) serve(ctx context.Context, requestChan chan *packet.Session) error {
259259
for i := 0; i < me.expectedMsgCount; i++ {
260-
requestChan <- &quicpogs.SessionDatagram{
260+
requestChan <- &packet.Session{
261261
ID: me.id,
262262
Payload: me.expectedMsg,
263263
}

datagramsession/session.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99

1010
"github.com/google/uuid"
1111
"github.com/rs/zerolog"
12+
13+
"github.com/cloudflare/cloudflared/packet"
1214
)
1315

1416
const (
@@ -19,7 +21,7 @@ func SessionIdleErr(timeout time.Duration) error {
1921
return fmt.Errorf("session idle for %v", timeout)
2022
}
2123

22-
type transportSender func(sessionID uuid.UUID, payload []byte) error
24+
type transportSender func(session *packet.Session) error
2325

2426
// Session is a bidirectional pipe of datagrams between transport and dstConn
2527
// Destination can be a connection with origin or with eyeball
@@ -101,7 +103,11 @@ func (s *Session) dstToTransport(buffer []byte) (closeSession bool, err error) {
101103
s.markActive()
102104
// https://pkg.go.dev/io#Reader suggests caller should always process n > 0 bytes
103105
if n > 0 || err == nil {
104-
if sendErr := s.sendFunc(s.ID, buffer[:n]); sendErr != nil {
106+
session := packet.Session{
107+
ID: s.ID,
108+
Payload: buffer[:n],
109+
}
110+
if sendErr := s.sendFunc(&session); sendErr != nil {
105111
return false, sendErr
106112
}
107113
}

datagramsession/session_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"github.com/stretchr/testify/require"
1616
"golang.org/x/sync/errgroup"
1717

18-
quicpogs "github.com/cloudflare/cloudflared/quic"
18+
"github.com/cloudflare/cloudflared/packet"
1919
)
2020

2121
// TestCloseSession makes sure a session will stop after context is done
@@ -118,7 +118,7 @@ func testActiveSessionNotClosed(t *testing.T, readFromDst bool, writeToDst bool)
118118
cfdConn, originConn := net.Pipe()
119119
payload := testPayload(sessionID)
120120

121-
respChan := make(chan *quicpogs.SessionDatagram)
121+
respChan := make(chan *packet.Session)
122122
sender := newMockTransportSender(sessionID, payload)
123123
mg := NewManager(&nopLogger, sender.muxSession, respChan)
124124
session := mg.newSession(sessionID, cfdConn)
@@ -243,12 +243,12 @@ func newMockTransportSender(expectedSessionID uuid.UUID, expectedPayload []byte)
243243
}
244244
}
245245

246-
func (mts *mockTransportSender) muxSession(sessionID uuid.UUID, payload []byte) error {
247-
if sessionID != mts.expectedSessionID {
248-
return fmt.Errorf("Expect session %s, got %s", mts.expectedSessionID, sessionID)
246+
func (mts *mockTransportSender) muxSession(session *packet.Session) error {
247+
if session.ID != mts.expectedSessionID {
248+
return fmt.Errorf("Expect session %s, got %s", mts.expectedSessionID, session.ID)
249249
}
250-
if !bytes.Equal(payload, mts.expectedPayload) {
251-
return fmt.Errorf("Expect %v, read %v", mts.expectedPayload, payload)
250+
if !bytes.Equal(session.Payload, mts.expectedPayload) {
251+
return fmt.Errorf("Expect %v, read %v", mts.expectedPayload, session.Payload)
252252
}
253253
return nil
254254
}
@@ -258,7 +258,7 @@ type sendOnceTransportSender struct {
258258
sentChan chan struct{}
259259
}
260260

261-
func (sots *sendOnceTransportSender) muxSession(sessionID uuid.UUID, payload []byte) error {
261+
func (sots *sendOnceTransportSender) muxSession(session *packet.Session) error {
262262
defer close(sots.sentChan)
263-
return sots.baseSender.muxSession(sessionID, payload)
263+
return sots.baseSender.muxSession(session)
264264
}

go.mod

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ require (
3434
go.opentelemetry.io/proto/otlp v0.15.0
3535
go.uber.org/automaxprocs v1.4.0
3636
golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f
37-
golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e
37+
golang.org/x/net v0.0.0-20220812174116-3211cb980234
3838
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
39-
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a
39+
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10
4040
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
4141
google.golang.org/protobuf v1.28.0
4242
gopkg.in/coreos/go-oidc.v2 v2.2.1
@@ -67,6 +67,7 @@ require (
6767
github.com/gobwas/httphead v0.0.0-20200921212729-da3d93bc3c58 // indirect
6868
github.com/gobwas/pool v0.2.1 // indirect
6969
github.com/golang/protobuf v1.5.2 // indirect
70+
github.com/google/gopacket v1.1.19 // indirect
7071
github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
7172
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
7273
github.com/kylelemons/godebug v1.1.0 // indirect

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,8 @@ github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO
292292
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
293293
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
294294
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
295+
github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
296+
github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=
295297
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
296298
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
297299
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
@@ -710,6 +712,8 @@ golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qx
710712
golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
711713
golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ=
712714
golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
715+
golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E=
716+
golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
713717
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
714718
golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
715719
golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -816,6 +820,8 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
816820
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
817821
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
818822
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
823+
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg=
824+
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
819825
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
820826
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
821827
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=

0 commit comments

Comments
 (0)