From 521a3322455bbae6da2d535f3b77f142d52d900b Mon Sep 17 00:00:00 2001 From: Adityavardhan Agrawal Date: Wed, 9 Feb 2022 10:44:04 -0500 Subject: [PATCH 1/3] clearAllTables uses loop to clear tables --- pfcpiface/up4.go | 69 +++++++----------------------------------------- 1 file changed, 10 insertions(+), 59 deletions(-) diff --git a/pfcpiface/up4.go b/pfcpiface/up4.go index 93838b80d..e5e8d16a9 100644 --- a/pfcpiface/up4.go +++ b/pfcpiface/up4.go @@ -316,66 +316,17 @@ func (up4 *UP4) setUpfInfo(u *upf, conf *Conf) { } func (up4 *UP4) clearAllTables() error { - sessionsUplinkTableID, err := up4.p4RtTranslator.getTableIDByName(TableUplinkSessions) - if err != nil { - return err - } - - err = up4.p4client.ClearTable(sessionsUplinkTableID) - if err != nil { - return err - } - - sessionsDownlinkTableID, err := up4.p4RtTranslator.getTableIDByName(TableDownlinkSessions) - if err != nil { - return err - } - - err = up4.p4client.ClearTable(sessionsDownlinkTableID) - if err != nil { - return err - } - - terminationsUplinkTableID, err := up4.p4RtTranslator.getTableIDByName(TableUplinkTerminations) - if err != nil { - return err - } - - err = up4.p4client.ClearTable(terminationsUplinkTableID) - if err != nil { - return err - } - - terminationsDownlinkTableID, err := up4.p4RtTranslator.getTableIDByName(TableDownlinkTerminations) - if err != nil { - return err - } - - err = up4.p4client.ClearTable(terminationsDownlinkTableID) - if err != nil { - return err - } - - gtpTunnelPeersTableID, err := up4.p4RtTranslator.getTableIDByName(TableTunnelPeers) - if err != nil { - return err - } - - err = up4.p4client.ClearTable(gtpTunnelPeersTableID) - if err != nil { - return err - } - - applicationsTableID, err := up4.p4RtTranslator.getTableIDByName(TableApplications) - if err != nil { - return err - } - - err = up4.p4client.ClearTable(applicationsTableID) - if err != nil { - return err + tables := []string {TableUplinkSessions, TableDownlinkSessions,TableUplinkTerminations, TableDownlinkTerminations, TableTunnelPeers, TableApplications} + for _, table := range tables { + tableID, err := up4.p4RtTranslator.getTableIDByName(table) + if err != nil { + return err + } + err = up4.p4client.ClearTable(tableID) + if err != nil { + return err + } } - return nil } From 0ccf8e74a6a7d3c520c0d2a785910620a422df0f Mon Sep 17 00:00:00 2001 From: Adityavardhan Agrawal Date: Wed, 9 Feb 2022 16:47:48 -0500 Subject: [PATCH 2/3] added ClearTables in p4rtc --- pfcpiface/p4rtc.go | 31 +++++++++++++++++++++++++++++++ pfcpiface/up4.go | 10 ++++++---- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/pfcpiface/p4rtc.go b/pfcpiface/p4rtc.go index dfd159fba..4000fe70d 100644 --- a/pfcpiface/p4rtc.go +++ b/pfcpiface/p4rtc.go @@ -295,6 +295,37 @@ func (c *P4rtClient) ClearTable(tableID uint32) error { return c.WriteBatchReq(updates) } +func (c *P4rtClient) ClearTables(tableIDs []uint32) error { + log.Traceln("Clearing P4 tables") + updates := []*p4.Update{} + for _, tableID := range tableIDs { + + entry := &p4.TableEntry{ + TableId: tableID, + Priority: DefaultPriority, + } + + readRes, err := c.ReadTableEntry(entry) + if err != nil { + return err + } + + updates := make([]*p4.Update, len(readRes.GetEntities())) + + for _, entity := range readRes.GetEntities() { + updateType := p4.Update_DELETE + update := &p4.Update{ + Type: updateType, + Entity: entity, + } + + updates = append(updates, update) + } + } + + return c.WriteBatchReq(updates) +} + // InsertTableEntry .. Insert table Entry. func (c *P4rtClient) InsertTableEntry(entry *p4.TableEntry, funcType uint8) error { log.Println("Insert Table Entry for Table ", entry.TableId) diff --git a/pfcpiface/up4.go b/pfcpiface/up4.go index e5e8d16a9..e9c3901cf 100644 --- a/pfcpiface/up4.go +++ b/pfcpiface/up4.go @@ -317,15 +317,17 @@ func (up4 *UP4) setUpfInfo(u *upf, conf *Conf) { func (up4 *UP4) clearAllTables() error { tables := []string {TableUplinkSessions, TableDownlinkSessions,TableUplinkTerminations, TableDownlinkTerminations, TableTunnelPeers, TableApplications} + tableIDs := make([]uint32, len(tables)) for _, table := range tables { tableID, err := up4.p4RtTranslator.getTableIDByName(table) if err != nil { return err } - err = up4.p4client.ClearTable(tableID) - if err != nil { - return err - } + tableIDs = append(tableIDs, tableID) + } + err := up4.p4client.ClearTables(tableIDs) + if err != nil { + return err } return nil } From 22c836568ca50f48c2fe3ecfec265d79d6a26714 Mon Sep 17 00:00:00 2001 From: Adityavardhan Agrawal Date: Mon, 14 Feb 2022 22:07:13 -0500 Subject: [PATCH 3/3] Fix golint --- pfcpiface/p4rtc.go | 8 ++++---- pfcpiface/up4.go | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pfcpiface/p4rtc.go b/pfcpiface/p4rtc.go index 4000fe70d..5089dc54e 100644 --- a/pfcpiface/p4rtc.go +++ b/pfcpiface/p4rtc.go @@ -297,9 +297,10 @@ func (c *P4rtClient) ClearTable(tableID uint32) error { func (c *P4rtClient) ClearTables(tableIDs []uint32) error { log.Traceln("Clearing P4 tables") + updates := []*p4.Update{} - for _, tableID := range tableIDs { + for _, tableID := range tableIDs { entry := &p4.TableEntry{ TableId: tableID, Priority: DefaultPriority, @@ -310,8 +311,6 @@ func (c *P4rtClient) ClearTables(tableIDs []uint32) error { return err } - updates := make([]*p4.Update, len(readRes.GetEntities())) - for _, entity := range readRes.GetEntities() { updateType := p4.Update_DELETE update := &p4.Update{ @@ -322,7 +321,7 @@ func (c *P4rtClient) ClearTables(tableIDs []uint32) error { updates = append(updates, update) } } - + return c.WriteBatchReq(updates) } @@ -362,6 +361,7 @@ func (c *P4rtClient) ApplyTableEntries(methodType p4.Update_Type, entries ...*p4 }, } log.Traceln("Writing table entry: ", proto.MarshalTextString(update)) + updates = append(updates, update) } diff --git a/pfcpiface/up4.go b/pfcpiface/up4.go index 4a6a58db1..ac7492fda 100644 --- a/pfcpiface/up4.go +++ b/pfcpiface/up4.go @@ -322,19 +322,23 @@ func (up4 *UP4) setUpfInfo(u *upf, conf *Conf) { } func (up4 *UP4) clearAllTables() error { - tables := []string {TableUplinkSessions, TableDownlinkSessions,TableUplinkTerminations, TableDownlinkTerminations, TableTunnelPeers, TableApplications} + tables := []string{TableUplinkSessions, TableDownlinkSessions, TableUplinkTerminations, TableDownlinkTerminations, TableTunnelPeers, TableApplications} tableIDs := make([]uint32, len(tables)) + for _, table := range tables { tableID, err := up4.p4RtTranslator.getTableIDByName(table) if err != nil { return err } + tableIDs = append(tableIDs, tableID) } + err := up4.p4client.ClearTables(tableIDs) if err != nil { return err } + return nil }