Skip to content

Commit

Permalink
Add support for application filtering in UP4 plugin (#410)
Browse files Browse the repository at this point in the history
  • Loading branch information
Tomasz Osiński committed Feb 1, 2022
1 parent 634d190 commit 675c303
Show file tree
Hide file tree
Showing 7 changed files with 439 additions and 159 deletions.
68 changes: 34 additions & 34 deletions pfcpiface/bess.go
Original file line number Diff line number Diff line change
Expand Up @@ -493,8 +493,8 @@ func (b *bess) sessionStats(pc *PfcpNodeCollector, ch chan<- prometheus.Metric)

// Try to find the N6 uplink PDR with the UE IP.
for _, p := range session.pdrs {
if p.IsUplink() && p.srcIP > 0 {
ueIpString = int2ip(p.srcIP).String()
if p.IsUplink() && p.ueAddress > 0 {
ueIpString = int2ip(p.ueAddress).String()
log.Traceln(p.fseID, " -> ", ueIpString)

break
Expand Down Expand Up @@ -715,24 +715,24 @@ func (b *bess) addPDR(ctx context.Context, done chan<- bool, p pdr) {
Gate: uint64(p.needDecap),
Priority: int64(math.MaxUint32 - p.precedence),
Values: []*pb.FieldData{
intEnc(uint64(p.srcIface)), /* src_iface */
intEnc(uint64(p.tunnelIP4Dst)), /* tunnel_ipv4_dst */
intEnc(uint64(p.tunnelTEID)), /* enb_teid */
intEnc(uint64(p.srcIP)), /* ueaddr ip*/
intEnc(uint64(p.dstIP)), /* inet ip */
intEnc(uint64(p.srcPort)), /* ue port */
intEnc(uint64(p.dstPort)), /* inet port */
intEnc(uint64(p.proto)), /* proto id */
intEnc(uint64(p.srcIface)), /* src_iface */
intEnc(uint64(p.tunnelIP4Dst)), /* tunnel_ipv4_dst */
intEnc(uint64(p.tunnelTEID)), /* enb_teid */
intEnc(uint64(p.appFilter.srcIP)), /* ueaddr ip*/
intEnc(uint64(p.appFilter.dstIP)), /* inet ip */
intEnc(uint64(p.appFilter.srcPort)), /* ue port */
intEnc(uint64(p.appFilter.dstPort)), /* inet port */
intEnc(uint64(p.appFilter.proto)), /* proto id */
},
Masks: []*pb.FieldData{
intEnc(uint64(p.srcIfaceMask)), /* src_iface-mask */
intEnc(uint64(p.tunnelIP4DstMask)), /* tunnel_ipv4_dst-mask */
intEnc(uint64(p.tunnelTEIDMask)), /* enb_teid-mask */
intEnc(uint64(p.srcIPMask)), /* ueaddr ip-mask */
intEnc(uint64(p.dstIPMask)), /* inet ip-mask */
intEnc(uint64(p.srcPortMask)), /* ue port-mask */
intEnc(uint64(p.dstPortMask)), /* inet port-mask */
intEnc(uint64(p.protoMask)), /* proto id-mask */
intEnc(uint64(p.srcIfaceMask)), /* src_iface-mask */
intEnc(uint64(p.tunnelIP4DstMask)), /* tunnel_ipv4_dst-mask */
intEnc(uint64(p.tunnelTEIDMask)), /* enb_teid-mask */
intEnc(uint64(p.appFilter.srcIPMask)), /* ueaddr ip-mask */
intEnc(uint64(p.appFilter.dstIPMask)), /* inet ip-mask */
intEnc(uint64(p.appFilter.srcPortMask)), /* ue port-mask */
intEnc(uint64(p.appFilter.dstPortMask)), /* inet port-mask */
intEnc(uint64(p.appFilter.protoMask)), /* proto id-mask */
},
Valuesv: []*pb.FieldData{
intEnc(uint64(p.pdrID)), /* pdr-id */
Expand Down Expand Up @@ -763,24 +763,24 @@ func (b *bess) delPDR(ctx context.Context, done chan<- bool, p pdr) {

f := &pb.WildcardMatchCommandDeleteArg{
Values: []*pb.FieldData{
intEnc(uint64(p.srcIface)), /* src_iface */
intEnc(uint64(p.tunnelIP4Dst)), /* tunnel_ipv4_dst */
intEnc(uint64(p.tunnelTEID)), /* enb_teid */
intEnc(uint64(p.srcIP)), /* ueaddr ip*/
intEnc(uint64(p.dstIP)), /* inet ip */
intEnc(uint64(p.srcPort)), /* ue port */
intEnc(uint64(p.dstPort)), /* inet port */
intEnc(uint64(p.proto)), /* proto id */
intEnc(uint64(p.srcIface)), /* src_iface */
intEnc(uint64(p.tunnelIP4Dst)), /* tunnel_ipv4_dst */
intEnc(uint64(p.tunnelTEID)), /* enb_teid */
intEnc(uint64(p.appFilter.srcIP)), /* ueaddr ip*/
intEnc(uint64(p.appFilter.dstIP)), /* inet ip */
intEnc(uint64(p.appFilter.srcPort)), /* ue port */
intEnc(uint64(p.appFilter.dstPort)), /* inet port */
intEnc(uint64(p.appFilter.proto)), /* proto id */
},
Masks: []*pb.FieldData{
intEnc(uint64(p.srcIfaceMask)), /* src_iface-mask */
intEnc(uint64(p.tunnelIP4DstMask)), /* tunnel_ipv4_dst-mask */
intEnc(uint64(p.tunnelTEIDMask)), /* enb_teid-mask */
intEnc(uint64(p.srcIPMask)), /* ueaddr ip-mask */
intEnc(uint64(p.dstIPMask)), /* inet ip-mask */
intEnc(uint64(p.srcPortMask)), /* ue port-mask */
intEnc(uint64(p.dstPortMask)), /* inet port-mask */
intEnc(uint64(p.protoMask)), /* proto id-mask */
intEnc(uint64(p.srcIfaceMask)), /* src_iface-mask */
intEnc(uint64(p.tunnelIP4DstMask)), /* tunnel_ipv4_dst-mask */
intEnc(uint64(p.tunnelTEIDMask)), /* enb_teid-mask */
intEnc(uint64(p.appFilter.srcIPMask)), /* ueaddr ip-mask */
intEnc(uint64(p.appFilter.dstIPMask)), /* inet ip-mask */
intEnc(uint64(p.appFilter.srcPortMask)), /* ue port-mask */
intEnc(uint64(p.appFilter.dstPortMask)), /* inet port-mask */
intEnc(uint64(p.appFilter.protoMask)), /* proto id-mask */
},
}

Expand Down
18 changes: 12 additions & 6 deletions pfcpiface/grpcsim.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,12 @@ func (u *upf) sim(mode simMode, s *SimModeInfo) {
// create/delete downlink pdr
pdrN6Down := pdr{
srcIface: core,
dstIP: ip2int(ueip) + i,
appFilter: applicationFilter{
dstIP: ip2int(ueip) + i,
dstIPMask: 0xFFFFFFFF,
},

srcIfaceMask: 0xFF,
dstIPMask: 0xFFFFFFFF,

precedence: 255,

Expand Down Expand Up @@ -132,12 +134,14 @@ func (u *upf) sim(mode simMode, s *SimModeInfo) {
srcIface: access,
tunnelIP4Dst: ip2int(u.accessIP),
tunnelTEID: n3TEID + i,
srcIP: ip2int(ueip) + i,
appFilter: applicationFilter{
srcIP: ip2int(ueip) + i,
srcIPMask: 0xFFFFFFFF,
},

srcIfaceMask: 0xFF,
tunnelIP4DstMask: 0xFFFFFFFF,
tunnelTEIDMask: 0xFFFFFFFF,
srcIPMask: 0xFFFFFFFF,

precedence: 255,

Expand All @@ -153,12 +157,14 @@ func (u *upf) sim(mode simMode, s *SimModeInfo) {
srcIface: access,
tunnelIP4Dst: ip2int(u.accessIP),
tunnelTEID: n3TEID + i,
dstIP: ip2int(n9appip),
appFilter: applicationFilter{
dstIP: ip2int(n9appip),
dstIPMask: 0xFFFFFFFF,
},

srcIfaceMask: 0xFF,
tunnelIP4DstMask: 0xFFFFFFFF,
tunnelTEIDMask: 0xFFFFFFFF,
dstIPMask: 0xFFFFFFFF,

precedence: 1,

Expand Down

0 comments on commit 675c303

Please sign in to comment.