Skip to content

Commit

Permalink
refactor(xdp): rename GTPU[IPv4+TEID]->PDR map (#593)
Browse files Browse the repository at this point in the history
  • Loading branch information
pespin authored Feb 25, 2025
1 parent 49b1600 commit 3dd23b4
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 13 deletions.
4 changes: 2 additions & 2 deletions cmd/api/rest/uplink_pdr.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func (h *ApiHandler) getUplinkPdrValue(c *gin.Context) {
}

var value ebpf.PdrInfo
if err = h.BpfObjects.IpEntrypointObjects.PdrMapUplinkIp4.Lookup(uint32(id), unsafe.Pointer(&value)); err != nil {
if err = h.BpfObjects.IpEntrypointObjects.PdrMapTeidIp4.Lookup(uint32(id), unsafe.Pointer(&value)); err != nil {
log.Printf("Error reading map: %s", err.Error())
c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
return
Expand Down Expand Up @@ -55,7 +55,7 @@ func (h *ApiHandler) setUplinkPdrValue(c *gin.Context) {
QerId: pdrElement.QerId,
}

if err := h.BpfObjects.IpEntrypointObjects.PdrMapUplinkIp4.Put(uint32(pdrElement.Id), unsafe.Pointer(&value)); err != nil {
if err := h.BpfObjects.IpEntrypointObjects.PdrMapTeidIp4.Put(uint32(pdrElement.Id), unsafe.Pointer(&value)); err != nil {
log.Printf("Error writting map: %s", err.Error())
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
Expand Down
2 changes: 1 addition & 1 deletion cmd/ebpf/objects.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ func (bpfObjects *BpfObjects) ResizeAllMaps(qerMapSize uint32, farMapSize uint32
log.Info().Msgf("Failed to resize PDR map: %s", err)
return err
}
if err := ResizeEbpfMap(&bpfObjects.PdrMapUplinkIp4, bpfObjects.UpfIpEntrypointFunc, pdrMapSize); err != nil {
if err := ResizeEbpfMap(&bpfObjects.PdrMapTeidIp4, bpfObjects.UpfIpEntrypointFunc, pdrMapSize); err != nil {
log.Info().Msgf("Failed to resize PDR map: %s", err)
return err
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/ebpf/objects_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ func testGtpWithPDRBenchmark(bpfObjects *BpfObjects, repeat int) (int64, error)
if err := bpfObjects.QerMap.Put(uint32(1), unsafe.Pointer(&qer)); err != nil {
return 0, fmt.Errorf("benchmark run failed: %v", err)
}
if err := bpfObjects.PdrMapUplinkIp4.Put(teid, unsafe.Pointer(&pdr)); err != nil {
if err := bpfObjects.PdrMapTeidIp4.Put(teid, unsafe.Pointer(&pdr)); err != nil {
return 0, fmt.Errorf("benchmark run failed: %v", err)
}

Expand Down
10 changes: 5 additions & 5 deletions cmd/ebpf/pdr.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,13 @@ func (bpfObjects *BpfObjects) PutPdrUplink(teid uint32, pdrInfo PdrInfo) error {
var pdrToStore IpEntrypointPdrInfo
var err error
if pdrInfo.SdfFilter != nil {
if pdrToStore, err = PreprocessPdrWithSdf(bpfObjects.PdrMapUplinkIp4.Lookup, teid, pdrInfo); err != nil {
if pdrToStore, err = PreprocessPdrWithSdf(bpfObjects.PdrMapTeidIp4.Lookup, teid, pdrInfo); err != nil {
return err
}
} else {
pdrToStore = ToIpEntrypointPdrInfo(pdrInfo)
}
return bpfObjects.PdrMapUplinkIp4.Put(teid, unsafe.Pointer(&pdrToStore))
return bpfObjects.PdrMapTeidIp4.Put(teid, unsafe.Pointer(&pdrToStore))
}

func (bpfObjects *BpfObjects) PutPdrDownlink(ipv4 net.IP, pdrInfo PdrInfo) error {
Expand All @@ -84,13 +84,13 @@ func (bpfObjects *BpfObjects) UpdatePdrUplink(teid uint32, pdrInfo PdrInfo) erro
var pdrToStore IpEntrypointPdrInfo
var err error
if pdrInfo.SdfFilter != nil {
if pdrToStore, err = PreprocessPdrWithSdf(bpfObjects.PdrMapUplinkIp4.Lookup, teid, pdrInfo); err != nil {
if pdrToStore, err = PreprocessPdrWithSdf(bpfObjects.PdrMapTeidIp4.Lookup, teid, pdrInfo); err != nil {
return err
}
} else {
pdrToStore = ToIpEntrypointPdrInfo(pdrInfo)
}
return bpfObjects.PdrMapUplinkIp4.Update(teid, unsafe.Pointer(&pdrToStore), ebpf.UpdateExist)
return bpfObjects.PdrMapTeidIp4.Update(teid, unsafe.Pointer(&pdrToStore), ebpf.UpdateExist)
}

func (bpfObjects *BpfObjects) UpdatePdrDownlink(ipv4 net.IP, pdrInfo PdrInfo) error {
Expand All @@ -109,7 +109,7 @@ func (bpfObjects *BpfObjects) UpdatePdrDownlink(ipv4 net.IP, pdrInfo PdrInfo) er

func (bpfObjects *BpfObjects) DeletePdrUplink(teid uint32) error {
log.Debug().Msgf("EBPF: Delete PDR Uplink: teid=%d", teid)
return bpfObjects.PdrMapUplinkIp4.Delete(teid)
return bpfObjects.PdrMapTeidIp4.Delete(teid)
}

func (bpfObjects *BpfObjects) DeletePdrDownlink(ipv4 net.IP) error {
Expand Down
2 changes: 1 addition & 1 deletion cmd/ebpf/xdp/n3n6_entrypoint.c
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ static __always_inline enum xdp_action handle_gtp_packet(struct packet_context *
* Step 1: search for PDR and apply PDR instructions
*/
__u32 teid = bpf_htonl(ctx->gtp->teid);
struct pdr_info *pdr = bpf_map_lookup_elem(&pdr_map_uplink_ip4, &teid);
struct pdr_info *pdr = bpf_map_lookup_elem(&pdr_map_teid_ip4, &teid);
if (!pdr) {
upf_printk("upf: [n3] no session for teid:%u", teid);
return DEFAULT_XDP_ACTION;
Expand Down
6 changes: 3 additions & 3 deletions cmd/ebpf/xdp/pdr.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

#include "xdp/sdf_filter.h"

#define PDR_MAP_UPLINK_SIZE 1024
#define PDR_MAP_TEID_IPV4_SIZE 1024
#define PDR_MAP_DOWNLINK_IPV4_SIZE 1024
#define PDR_MAP_DOWNLINK_IPV6_SIZE 1024
#define FAR_MAP_SIZE 1024
Expand Down Expand Up @@ -89,8 +89,8 @@ struct
__uint(type, BPF_MAP_TYPE_HASH);
__type(key, __u32);
__type(value, struct pdr_info);
__uint(max_entries, PDR_MAP_UPLINK_SIZE);
} pdr_map_uplink_ip4 SEC(".maps");
__uint(max_entries, PDR_MAP_TEID_IPV4_SIZE);
} pdr_map_teid_ip4 SEC(".maps");

enum far_action_mask {
FAR_DROP = 0x01,
Expand Down

0 comments on commit 3dd23b4

Please sign in to comment.