Skip to content

Commit 9377d0d

Browse files
committed
Don't hardcode source prefix in behaviors with ctrl
1 parent 054de34 commit 9377d0d

File tree

3 files changed

+30
-11
lines changed

3 files changed

+30
-11
lines changed

internal/netfunc/headend-ctrl.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,22 @@ func NewHeadendWithCtrl(he *config.Headend, ttl uint8, hopLimit uint8, setup_reg
2424
if !ok {
2525
return nil, fmt.Errorf("No database in the registry")
2626
}
27-
return NewNetFunc(NewHeadendEncapsWithCtrl(p, ttl, hopLimit, db)), nil
27+
srcAddressPrefix, err := netip.ParsePrefix(*he.SourceAddressPrefix)
28+
if err != nil {
29+
return nil, err
30+
}
31+
return NewNetFunc(NewHeadendEncapsWithCtrl(p, srcAddressPrefix, ttl, hopLimit, db)), nil
2832
case config.H_M_GTP4_D:
2933
db, ok := setup_registry.DB()
3034
if !ok {
3135
return nil, fmt.Errorf("No database in the registry")
3236
}
37+
srcAddressPrefix, err := netip.ParsePrefix(*he.SourceAddressPrefix)
38+
if err != nil {
39+
return nil, err
40+
}
3341

34-
g, err := NewHeadendGTP4WithCtrl(p, ttl, hopLimit, db)
42+
g, err := NewHeadendGTP4WithCtrl(p, srcAddressPrefix, ttl, hopLimit, db)
3543
if err != nil {
3644
return nil, err
3745
}

internal/netfunc/headend-encaps-ctrl.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,29 @@ package netfunc
66

77
import (
88
"context"
9+
"fmt"
910
"net"
1011
"net/netip"
1112

1213
"github.com/google/gopacket"
1314
"github.com/google/gopacket/layers"
15+
1416
gopacket_srv6 "github.com/nextmn/gopacket-srv6"
17+
"github.com/nextmn/rfc9433/encoding"
1518
db_api "github.com/nextmn/srv6/internal/database/api"
1619
)
1720

1821
type HeadendEncapsWithCtrl struct {
1922
BaseHandler
20-
db db_api.Downlink
23+
db db_api.Downlink
24+
srcPrefix netip.Prefix
2125
}
2226

23-
func NewHeadendEncapsWithCtrl(prefix netip.Prefix, ttl uint8, hopLimit uint8, db db_api.Downlink) *HeadendEncapsWithCtrl {
27+
func NewHeadendEncapsWithCtrl(prefix netip.Prefix, srcPrefix netip.Prefix, ttl uint8, hopLimit uint8, db db_api.Downlink) *HeadendEncapsWithCtrl {
2428
return &HeadendEncapsWithCtrl{
2529
BaseHandler: NewBaseHandler(prefix, ttl, hopLimit),
2630
db: db,
31+
srcPrefix: srcPrefix,
2732
}
2833
}
2934

@@ -40,7 +45,13 @@ func (h HeadendEncapsWithCtrl) Handle(ctx context.Context, packet []byte) ([]byt
4045
if err != nil {
4146
return nil, err
4247
}
43-
src := net.ParseIP("fc00:3:1:0A03:0001:0868::30") // FIXME: dont hardcode
48+
srgw_gtp_ip := netip.MustParseAddr("10.3.0.1") // FIXME: dont hardcode
49+
ipv6Src := encoding.NewMGTP4IPv6Src(h.srcPrefix, srgw_gtp_ip.As4(), 2152) // FIXME:dont hardcode udp port number to 2152
50+
src, err := ipv6Src.Marshal()
51+
if err != nil {
52+
return nil, fmt.Errorf("Error during serialization of IPv6 SA: %w", err)
53+
}
54+
4455
nextHop := action.NextHop.AsSlice()
4556
ipheader := &layers.IPv6{
4657
SrcIP: src,

internal/netfunc/headend-gtp4-ctrl.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,20 @@ import (
1616

1717
gopacket_srv6 "github.com/nextmn/gopacket-srv6"
1818
"github.com/nextmn/rfc9433/encoding"
19-
2019
db_api "github.com/nextmn/srv6/internal/database/api"
2120
)
2221

2322
type HeadendGTP4WithCtrl struct {
2423
BaseHandler
25-
db db_api.Uplink
24+
db db_api.Uplink
25+
srcPrefix netip.Prefix
2626
}
2727

28-
func NewHeadendGTP4WithCtrl(prefix netip.Prefix, ttl uint8, hopLimit uint8, db db_api.Uplink) (*HeadendGTP4WithCtrl, error) {
28+
func NewHeadendGTP4WithCtrl(prefix netip.Prefix, srcPrefix netip.Prefix, ttl uint8, hopLimit uint8, db db_api.Uplink) (*HeadendGTP4WithCtrl, error) {
2929
return &HeadendGTP4WithCtrl{
3030
BaseHandler: NewBaseHandler(prefix, ttl, hopLimit),
3131
db: db,
32+
srcPrefix: srcPrefix,
3233
}, nil
3334
}
3435

@@ -83,12 +84,11 @@ func (h HeadendGTP4WithCtrl) Handle(ctx context.Context, packet []byte) ([]byte,
8384
ipv4SA := pqt.NetworkLayer().NetworkFlow().Src().Raw()
8485
udpSP := pqt.TransportLayer().TransportFlow().Src().Raw()
8586

86-
srcPrefix := netip.MustParsePrefix("fc00:1:1::/48") // FIXME: dont hardcode
87-
ipv6SA := encoding.NewMGTP4IPv6Src(srcPrefix, [4]byte(ipv4SA), binary.BigEndian.Uint16(udpSP))
87+
ipv6SA := encoding.NewMGTP4IPv6Src(h.srcPrefix, [4]byte(ipv4SA), binary.BigEndian.Uint16(udpSP))
8888

8989
src, err := ipv6SA.Marshal()
9090
if err != nil {
91-
return nil, fmt.Errorf("Error during serialization of IPv6 SA: %s", err)
91+
return nil, fmt.Errorf("Error during serialization of IPv6 SA: %w", err)
9292
}
9393
nextHop := action.NextHop.AsSlice()
9494

0 commit comments

Comments
 (0)