Skip to content

Commit 5d3f0ec

Browse files
authored
Merge pull request #2 from wmnsk/master
syncing changes from original branch to our fork
2 parents 1e836ee + e17b680 commit 5d3f0ec

File tree

326 files changed

+3425
-3418
lines changed

Some content is hidden

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

326 files changed

+3425
-3418
lines changed

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ For the detailed usage of specific version, see README.md under each version's d
8080

8181
| Version | Details |
8282
|---------|---------------------------|
83-
| GTPv0 | [README.md](v0/README.md) |
84-
| GTPv1 | [README.md](v1/README.md) |
85-
| GTPv2 | [README.md](v2/README.md) |
83+
| GTPv0 | [README.md](gtpv0/README.md) |
84+
| GTPv1 | [README.md](gtpv1/README.md) |
85+
| GTPv2 | [README.md](gtpv2/README.md) |
8686

8787
## Supported Features
8888

@@ -93,9 +93,9 @@ Your contribution is welcome to implement helpers for all the types, of course!
9393

9494
| Version | Messages | IEs | Networking (state machine) | Details |
9595
|-------------------|----------|-------|------------------------------------------------------|-------------------------------------------------------|
96-
| GTPv0 | 35.7% | 81.8% | not implemented yet | [Supported Features](v0/README.md#supported-features) |
97-
| GTPv1 | 26.6% | 30.1% | v1-U is functional, <br> v1-C is not implemented yet | [Supported Features](v1/README.md#supported-features) |
98-
| GTPv2 | 41.0% | 43.2% | almost functional | [Supported Features](v2/README.md#supported-features) |
96+
| GTPv0 | 35.7% | 81.8% | not implemented yet | [Supported Features](gtpv0/README.md#supported-features) |
97+
| GTPv1 | 26.6% | 30.1% | v1-U is functional, <br> v1-C is not implemented yet | [Supported Features](gtpv1/README.md#supported-features) |
98+
| GTPv2 | 41.0% | 43.2% | almost functional | [Supported Features](gtpv2/README.md#supported-features) |
9999
| GTP' <br> (Prime) | N/A | N/A | N/A | _not planned_ |
100100

101101
## Disclaimer

examples/gw-tester/enb/enb.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121
"google.golang.org/grpc"
2222

2323
"github.com/wmnsk/go-gtp/examples/gw-tester/s1mme"
24-
v1 "github.com/wmnsk/go-gtp/v1"
24+
v1 "github.com/wmnsk/go-gtp/gtpv1"
2525
)
2626

2727
type enb struct {

examples/gw-tester/enb/metrics.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,15 @@ func (e *enb) runMetricsCollector() error {
4949
mc.messagesSent = promauto.NewCounterVec(
5050
prometheus.CounterOpts{
5151
Name: "enb_messages_sent_total",
52-
Help: "number of messages sent by messagge type",
52+
Help: "number of message sent by messagge type",
5353
},
5454
[]string{"dst", "type"},
5555
)
5656

5757
mc.messagesReceived = promauto.NewCounterVec(
5858
prometheus.CounterOpts{
5959
Name: "enb_messages_received_total",
60-
Help: "number of messages received by messagge type",
60+
Help: "number of message received by messagge type",
6161
},
6262
[]string{"src", "type"},
6363
)

examples/gw-tester/mme/handlers.go

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ package main
66

77
import (
88
"fmt"
9+
"github.com/wmnsk/go-gtp/gtpv2/ie"
10+
"github.com/wmnsk/go-gtp/gtpv2/message"
911
"log"
1012
"net"
1113

12-
v2 "github.com/wmnsk/go-gtp/v2"
13-
"github.com/wmnsk/go-gtp/v2/ies"
14-
"github.com/wmnsk/go-gtp/v2/messages"
14+
v2 "github.com/wmnsk/go-gtp/gtpv2"
1515
)
1616

17-
func (m *mme) handleCreateSessionResponse(c *v2.Conn, sgwAddr net.Addr, msg messages.Message) error {
17+
func (m *mme) handleCreateSessionResponse(c *v2.Conn, sgwAddr net.Addr, msg message.Message) error {
1818
log.Printf("Received %s from %s", msg.MessageTypeName(), sgwAddr)
1919
if m.mc != nil {
2020
m.mc.messagesReceived.WithLabelValues(sgwAddr.String(), msg.MessageTypeName()).Inc()
@@ -31,11 +31,11 @@ func (m *mme) handleCreateSessionResponse(c *v2.Conn, sgwAddr net.Addr, msg mess
3131
// assert type to refer to the struct field specific to the message.
3232
// in general, no need to check if it can be type-asserted, as long as the MessageType is
3333
// specified correctly in AddHandler().
34-
csRspFromSGW := msg.(*messages.CreateSessionResponse)
34+
csRspFromSGW := msg.(*message.CreateSessionResponse)
3535

3636
// check Cause value first.
37-
if ie := csRspFromSGW.Cause; ie != nil {
38-
cause, err := ie.Cause()
37+
if causeIE := csRspFromSGW.Cause; causeIE != nil {
38+
cause, err := causeIE.Cause()
3939
if err != nil {
4040
return err
4141
}
@@ -51,20 +51,20 @@ func (m *mme) handleCreateSessionResponse(c *v2.Conn, sgwAddr net.Addr, msg mess
5151
return &v2.RequiredIEMissingError{Type: msg.MessageType()}
5252
}
5353

54-
if ie := csRspFromSGW.PAA; ie != nil {
55-
bearer.SubscriberIP, err = ie.IPAddress()
54+
if paaIE := csRspFromSGW.PAA; paaIE != nil {
55+
bearer.SubscriberIP, err = paaIE.IPAddress()
5656
if err != nil {
5757
return err
5858
}
5959
}
60-
if ie := csRspFromSGW.SenderFTEIDC; ie != nil {
61-
teid, err := ie.TEID()
60+
if fteidcIE := csRspFromSGW.SenderFTEIDC; fteidcIE != nil {
61+
teid, err := fteidcIE.TEID()
6262
if err != nil {
6363
return err
6464
}
6565
session.AddTEID(v2.IFTypeS11S4SGWGTPC, teid)
6666
} else {
67-
return &v2.RequiredIEMissingError{Type: ies.FullyQualifiedTEID}
67+
return &v2.RequiredIEMissingError{Type: ie.FullyQualifiedTEID}
6868
}
6969

7070
s11sgwTEID, err := session.GetTEID(v2.IFTypeS11S4SGWGTPC)
@@ -79,30 +79,30 @@ func (m *mme) handleCreateSessionResponse(c *v2.Conn, sgwAddr net.Addr, msg mess
7979
}
8080

8181
if brCtxIE := csRspFromSGW.BearerContextsCreated; brCtxIE != nil {
82-
for _, ie := range brCtxIE.ChildIEs {
83-
switch ie.Type {
84-
case ies.EPSBearerID:
85-
bearer.EBI, err = ie.EPSBearerID()
82+
for _, childIE := range brCtxIE.ChildIEs {
83+
switch childIE.Type {
84+
case ie.EPSBearerID:
85+
bearer.EBI, err = childIE.EPSBearerID()
8686
if err != nil {
8787
return err
8888
}
89-
case ies.FullyQualifiedTEID:
90-
if ie.Instance() != 0 {
89+
case ie.FullyQualifiedTEID:
90+
if childIE.Instance() != 0 {
9191
continue
9292
}
93-
it, err := ie.InterfaceType()
93+
it, err := childIE.InterfaceType()
9494
if err != nil {
9595
return err
9696
}
97-
teid, err := ie.TEID()
97+
teid, err := childIE.TEID()
9898
if err != nil {
9999
return err
100100
}
101101
session.AddTEID(it, teid)
102102
}
103103
}
104104
} else {
105-
return &v2.RequiredIEMissingError{Type: ies.BearerContext}
105+
return &v2.RequiredIEMissingError{Type: ie.BearerContext}
106106
}
107107

108108
if err := session.Activate(); err != nil {
@@ -118,7 +118,7 @@ func (m *mme) handleCreateSessionResponse(c *v2.Conn, sgwAddr net.Addr, msg mess
118118
return nil
119119
}
120120

121-
func (m *mme) handleModifyBearerResponse(c *v2.Conn, sgwAddr net.Addr, msg messages.Message) error {
121+
func (m *mme) handleModifyBearerResponse(c *v2.Conn, sgwAddr net.Addr, msg message.Message) error {
122122
log.Printf("Received %s from %s", msg.MessageTypeName(), sgwAddr)
123123
if m.mc != nil {
124124
m.mc.messagesReceived.WithLabelValues(sgwAddr.String(), msg.MessageTypeName()).Inc()
@@ -129,9 +129,9 @@ func (m *mme) handleModifyBearerResponse(c *v2.Conn, sgwAddr net.Addr, msg messa
129129
return err
130130
}
131131

132-
mbRspFromSGW := msg.(*messages.ModifyBearerResponse)
133-
if ie := mbRspFromSGW.Cause; ie != nil {
134-
cause, err := ie.Cause()
132+
mbRspFromSGW := msg.(*message.ModifyBearerResponse)
133+
if causeIE := mbRspFromSGW.Cause; causeIE != nil {
134+
cause, err := causeIE.Cause()
135135
if err != nil {
136136
return err
137137
}
@@ -143,42 +143,42 @@ func (m *mme) handleModifyBearerResponse(c *v2.Conn, sgwAddr net.Addr, msg messa
143143
}
144144
}
145145
} else {
146-
return &v2.RequiredIEMissingError{Type: ies.Cause}
146+
return &v2.RequiredIEMissingError{Type: ie.Cause}
147147
}
148148

149149
if brCtxIE := mbRspFromSGW.BearerContextsModified; brCtxIE != nil {
150-
for _, ie := range brCtxIE.ChildIEs {
151-
switch ie.Type {
152-
case ies.FullyQualifiedTEID:
153-
if ie.Instance() != 0 {
150+
for _, childIE := range brCtxIE.ChildIEs {
151+
switch childIE.Type {
152+
case ie.FullyQualifiedTEID:
153+
if childIE.Instance() != 0 {
154154
continue
155155
}
156-
it, err := ie.InterfaceType()
156+
it, err := childIE.InterfaceType()
157157
if err != nil {
158158
return err
159159
}
160-
teid, err := ie.TEID()
160+
teid, err := childIE.TEID()
161161
if err != nil {
162162
return err
163163
}
164164
session.AddTEID(it, teid)
165165

166-
m.sgw.s1uIP, err = ie.IPAddress()
166+
m.sgw.s1uIP, err = childIE.IPAddress()
167167
if err != nil {
168168
return err
169169
}
170170
}
171171
}
172172
} else {
173-
return &v2.RequiredIEMissingError{Type: ies.BearerContext}
173+
return &v2.RequiredIEMissingError{Type: ie.BearerContext}
174174
}
175175

176176
log.Printf("Bearer modified with S-GW for Subscriber: %s", session.IMSI)
177177
m.modified <- struct{}{}
178178
return nil
179179
}
180180

181-
func (m *mme) handleDeleteSessionResponse(c *v2.Conn, sgwAddr net.Addr, msg messages.Message) error {
181+
func (m *mme) handleDeleteSessionResponse(c *v2.Conn, sgwAddr net.Addr, msg message.Message) error {
182182
log.Printf("Received %s from %s", msg.MessageTypeName(), sgwAddr)
183183
if m.mc != nil {
184184
m.mc.messagesReceived.WithLabelValues(sgwAddr.String(), msg.MessageTypeName()).Inc()

examples/gw-tester/mme/metrics.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ func (m *mme) runMetricsCollector() error {
3030
mc.messagesSent = promauto.NewCounterVec(
3131
prometheus.CounterOpts{
3232
Name: "mme_messages_sent_total",
33-
Help: "number of messages sent by messagge type",
33+
Help: "number of message sent by messagge type",
3434
},
3535
[]string{"dst", "type"},
3636
)
3737

3838
mc.messagesReceived = promauto.NewCounterVec(
3939
prometheus.CounterOpts{
4040
Name: "mme_messages_received_total",
41-
Help: "number of messages received by messagge type",
41+
Help: "number of message received by messagge type",
4242
},
4343
[]string{"src", "type"},
4444
)

examples/gw-tester/mme/mme.go

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import (
1616
"google.golang.org/grpc"
1717

1818
"github.com/wmnsk/go-gtp/examples/gw-tester/s1mme"
19-
v2 "github.com/wmnsk/go-gtp/v2"
20-
"github.com/wmnsk/go-gtp/v2/ies"
21-
"github.com/wmnsk/go-gtp/v2/messages"
19+
v2 "github.com/wmnsk/go-gtp/gtpv2"
20+
"github.com/wmnsk/go-gtp/gtpv2/ie"
21+
"github.com/wmnsk/go-gtp/gtpv2/message"
2222
)
2323

2424
// Session represents a subscriber.
@@ -129,9 +129,9 @@ func (m *mme) run(ctx context.Context) error {
129129
log.Printf("Started serving S11 on: %s", m.s11Addr)
130130

131131
m.s11Conn.AddHandlers(map[uint8]v2.HandlerFunc{
132-
messages.MsgTypeCreateSessionResponse: m.handleCreateSessionResponse,
133-
messages.MsgTypeModifyBearerResponse: m.handleModifyBearerResponse,
134-
messages.MsgTypeDeleteSessionResponse: m.handleDeleteSessionResponse,
132+
message.MsgTypeCreateSessionResponse: m.handleCreateSessionResponse,
133+
message.MsgTypeModifyBearerResponse: m.handleModifyBearerResponse,
134+
message.MsgTypeDeleteSessionResponse: m.handleDeleteSessionResponse,
135135
})
136136

137137
// start serving Prometheus, if address is given
@@ -265,30 +265,30 @@ func (m *mme) CreateSession(sess *Session) (*v2.Session, error) {
265265

266266
session, _, err := m.s11Conn.CreateSession(
267267
raddr,
268-
ies.NewIMSI(sess.IMSI),
269-
ies.NewMSISDN(sess.MSISDN),
270-
ies.NewMobileEquipmentIdentity(sess.IMEISV),
271-
ies.NewUserLocationInformation(
268+
ie.NewIMSI(sess.IMSI),
269+
ie.NewMSISDN(sess.MSISDN),
270+
ie.NewMobileEquipmentIdentity(sess.IMEISV),
271+
ie.NewUserLocationInformation(
272272
0, 0, 0, 1, 1, 0, 0, 0,
273273
m.enb.mcc, m.enb.mnc, 0, 0, 0, 0, 1, 1, 0, 0,
274274
),
275-
ies.NewRATType(v2.RATTypeEUTRAN),
276-
ies.NewIndicationFromOctets(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
275+
ie.NewRATType(v2.RATTypeEUTRAN),
276+
ie.NewIndicationFromOctets(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
277277
m.s11Conn.NewSenderFTEID(m.s11IP, ""),
278-
ies.NewFullyQualifiedTEID(v2.IFTypeS5S8PGWGTPC, 0, m.pgw.s5cIP, "").WithInstance(1),
279-
ies.NewAccessPointName(m.apn),
280-
ies.NewSelectionMode(v2.SelectionModeMSorNetworkProvidedAPNSubscribedVerified),
281-
ies.NewPDNType(v2.PDNTypeIPv4),
282-
ies.NewPDNAddressAllocation(sess.SrcIP),
283-
ies.NewAPNRestriction(v2.APNRestrictionNoExistingContextsorRestriction),
284-
ies.NewAggregateMaximumBitRate(0, 0),
285-
ies.NewBearerContext(
286-
ies.NewEPSBearerID(br.EBI),
287-
ies.NewBearerQoS(pci, br.PL, pvi, br.QCI, br.MBRUL, br.MBRDL, br.GBRUL, br.GBRDL),
278+
ie.NewFullyQualifiedTEID(v2.IFTypeS5S8PGWGTPC, 0, m.pgw.s5cIP, "").WithInstance(1),
279+
ie.NewAccessPointName(m.apn),
280+
ie.NewSelectionMode(v2.SelectionModeMSorNetworkProvidedAPNSubscribedVerified),
281+
ie.NewPDNType(v2.PDNTypeIPv4),
282+
ie.NewPDNAddressAllocation(sess.SrcIP),
283+
ie.NewAPNRestriction(v2.APNRestrictionNoExistingContextsorRestriction),
284+
ie.NewAggregateMaximumBitRate(0, 0),
285+
ie.NewBearerContext(
286+
ie.NewEPSBearerID(br.EBI),
287+
ie.NewBearerQoS(pci, br.PL, pvi, br.QCI, br.MBRUL, br.MBRDL, br.GBRUL, br.GBRDL),
288288
),
289-
ies.NewFullyQualifiedCSID(m.s11IP, 1),
290-
ies.NewServingNetwork(m.mcc, m.mnc),
291-
ies.NewUETimeZone(9*time.Hour, 0),
289+
ie.NewFullyQualifiedCSID(m.s11IP, 1),
290+
ie.NewServingNetwork(m.mcc, m.mnc),
291+
ie.NewUETimeZone(9*time.Hour, 0),
292292
)
293293
if err != nil {
294294
return nil, err
@@ -306,10 +306,10 @@ func (m *mme) ModifyBearer(sess *v2.Session, sub *Session) (*v2.Bearer, error) {
306306
return nil, err
307307
}
308308

309-
fteid := ies.NewFullyQualifiedTEID(v2.IFTypeS1UeNodeBGTPU, sub.itei, m.enb.s1uIP, "")
309+
fteid := ie.NewFullyQualifiedTEID(v2.IFTypeS1UeNodeBGTPU, sub.itei, m.enb.s1uIP, "")
310310
if _, err = m.s11Conn.ModifyBearer(
311-
teid, sess, ies.NewIndicationFromOctets(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
312-
ies.NewBearerContext(ies.NewEPSBearerID(sess.GetDefaultBearer().EBI), fteid, ies.NewPortNumber(2125)),
311+
teid, sess, ie.NewIndicationFromOctets(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
312+
ie.NewBearerContext(ie.NewEPSBearerID(sess.GetDefaultBearer().EBI), fteid, ie.NewPortNumber(2125)),
313313
); err != nil {
314314
return nil, err
315315
}

0 commit comments

Comments
 (0)