Skip to content

Commit

Permalink
Implement NatTranslationDelete.
Browse files Browse the repository at this point in the history
Signed-off-by: Venkatesh Petla <[email protected]>
  • Loading branch information
venkateshpnv authored and nupurjai committed Jan 9, 2023
1 parent c643ebc commit ccedf2c
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 38 deletions.
31 changes: 30 additions & 1 deletion inframanager/api_handler/api_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,36 @@ func (s *ApiServer) AddDelSnatPrefix(ctx context.Context, in *proto.AddDelSnatPr
func (s *ApiServer) NatTranslationDelete(ctx context.Context, in *proto.NatTranslation) (*proto.Reply, error) {
logger := log.WithField("func", "NatTranslationDelete")
logger.Infof("Incoming NatTranslationDelete %+v", in)
return &proto.Reply{Successful: true}, nil

out := &proto.Reply{
Successful: true,
}
service := store.Service{
ClusterIp: in.Endpoint.Ipv4Addr,
Port: in.Endpoint.Port,
Proto: in.Proto,
}

server := NewApiServer()

if err := p4.DeleteServiceRules(ctx, server.p4RtC, service); err != nil {
logger.Errorf("Failed to delete the service entry %s:%s:%d from the pipeline",
in.Endpoint.Ipv4Addr, in.Proto, in.Endpoint.Port)
out.Successful = false
return out, err
}

if !service.DeleteFromStore() {
logger.Errorf("Failed to delete service entry %s:%s:%d from the store",
in.Endpoint.Ipv4Addr, in.Proto, in.Endpoint.Port)

err := fmt.Errorf("Failed to delete service entry %s:%s:%d from the store",
in.Endpoint.Ipv4Addr, in.Proto, in.Endpoint.Port)
out.Successful = false
return out, err
}

return out, nil
}

func (s *ApiServer) ActivePolicyUpdate(ctx context.Context, in *proto.ActivePolicyUpdate) (*proto.Reply, error) {
Expand Down
29 changes: 25 additions & 4 deletions inframanager/cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,19 @@ func main() {
api.CloseGNMIConn()
os.Exit(1)
}
store.InitEndPointStore(false)
store.InitServiceStore(false)
if err := store.InitEndPointStore(false); !err {
log.Errorf("Failed to open endpoint store", err)
api.CloseP4RtCCon()
api.CloseGNMIConn()
os.Exit(1)
}
if err := store.InitServiceStore(false); !err {
log.Errorf("Failed to open service store", err)
api.CloseP4RtCCon()
api.CloseGNMIConn()
os.Exit(1)
}

} else {
// Setting fwding pipeline
log.Infof("Setting the pipeline")
Expand All @@ -100,8 +111,18 @@ func main() {
api.CloseGNMIConn()
os.Exit(1)
}
store.InitEndPointStore(true)
store.InitServiceStore(true)
if err := store.InitEndPointStore(true); !err {
log.Errorf("Failed to open endpoint store", err)
api.CloseP4RtCCon()
api.CloseGNMIConn()
os.Exit(1)
}
if err := store.InitServiceStore(true); !err {
log.Errorf("Failed to open service store", err)
api.CloseP4RtCCon()
api.CloseGNMIConn()
os.Exit(1)
}
}

// Starting inframanager gRPC server
Expand Down
94 changes: 61 additions & 33 deletions pkg/inframanager/p4/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,23 @@ func AsSl3TcpTable(ctx context.Context, p4RtC *client.Client,
}
memberList = append(memberList, member)

}

entryGroupTcp := p4RtC.NewActionProfileGroup(
"k8s_dp_control.as_sl3_tcp",
groupID,
memberList,
int32(128),
)

if action == Delete {
if err = p4RtC.DeleteActionProfileGroup(ctx, entryGroupTcp); err != nil {
log.Errorf("Cannot delete group entry from 'as_sl3_tcp table': %v", err)
return err
}
}

for i := 0; i < len(memberID); i++ {
entryMemberTcp := p4RtC.NewActionProfileMember(
"k8s_dp_control.as_sl3_tcp",
memberID[i],
Expand All @@ -116,13 +133,6 @@ func AsSl3TcpTable(ctx context.Context, p4RtC *client.Client,
}
}

entryGroupTcp := p4RtC.NewActionProfileGroup(
"k8s_dp_control.as_sl3_tcp",
groupID,
memberList,
int32(128),
)

switch action {
case Insert:
if err = p4RtC.InsertActionProfileGroup(ctx, entryGroupTcp); err != nil {
Expand All @@ -135,10 +145,6 @@ func AsSl3TcpTable(ctx context.Context, p4RtC *client.Client,
return err
}
case Delete:
if err = p4RtC.DeleteActionProfileGroup(ctx, entryGroupTcp); err != nil {
log.Errorf("Cannot delete group entry from 'as_sl3_tcp table': %v", err)
return err
}
default:
log.Warnf("Invalid action %v", action)
err := fmt.Errorf("Invalid action %v", action)
Expand All @@ -159,7 +165,23 @@ func AsSl3UdpTable(ctx context.Context, p4RtC *client.Client,
MemberId: memberID[i],
}
memberList = append(memberList, member)
}

entryGroupUdp := p4RtC.NewActionProfileGroup(
"k8s_dp_control.as_sl3_udp",
groupID,
memberList,
int32(128),
)

if action == Delete {
if err = p4RtC.DeleteActionProfileGroup(ctx, entryGroupUdp); err != nil {
log.Errorf("Cannot delete group entry from 'as_sl3_udp table': %v", err)
return err
}
}

for i := 0; i < len(memberID); i++ {
entryMemberUdp := p4RtC.NewActionProfileMember(
"k8s_dp_control.as_sl3_udp",
memberID[i],
Expand All @@ -184,12 +206,6 @@ func AsSl3UdpTable(ctx context.Context, p4RtC *client.Client,
}
}

entryGroupUdp := p4RtC.NewActionProfileGroup(
"k8s_dp_control.as_sl3_udp",
groupID,
memberList,
int32(128),
)
switch action {
case Insert:
if err = p4RtC.InsertActionProfileGroup(ctx, entryGroupUdp); err != nil {
Expand All @@ -202,10 +218,6 @@ func AsSl3UdpTable(ctx context.Context, p4RtC *client.Client,
return err
}
case Delete:
if err = p4RtC.DeleteActionProfileGroup(ctx, entryGroupUdp); err != nil {
log.Errorf("Cannot delete group entry from 'as_sl3_udp table': %v", err)
return err
}
default:
log.Warnf("Invalid action %v", action)
err := fmt.Errorf("Invalid action %v", action)
Expand Down Expand Up @@ -531,7 +543,7 @@ func InsertServiceRules(ctx context.Context, p4RtC *client.Client,
log.Errorf("Failed to WriteDestIpTable")
return
}
log.Debugf("Inserted into table WriteDestIpTable, pod ip addrs: %v, port id: %d, mod blob ptrs: %v",
log.Debugf("Inserted into table WriteDestIpTable, pod ip addrs: %v, port id: %v, mod blob ptrs: %v",
podIpAddr, portID, modblobPtrDNAT)

switch service.Proto {
Expand All @@ -541,7 +553,7 @@ func InsertServiceRules(ctx context.Context, p4RtC *client.Client,
log.Errorf("Failed to AsSl3TcpTable")
return
}
log.Debugf("Inserted into table AsSl3TcpTable, member ids: %v, mob blob ptrs: %v, group id: %d",
log.Debugf("Inserted into table AsSl3TcpTable, member ids: %v, mod blob ptrs: %v, group id: %d",
memberID, modblobPtrDNAT, groupID)

if err = SetMetaTcpTable(ctx, p4RtC, podIpAddr, portID, groupID, action); err != nil {
Expand All @@ -566,7 +578,7 @@ func InsertServiceRules(ctx context.Context, p4RtC *client.Client,
log.Errorf("Failed to AsSl3UdpTable")
return
}
log.Debugf("Inserted into table AsSl3UdpTable, member ids: %v, mob blob ptrs: %v, group id: %d",
log.Debugf("Inserted into table AsSl3UdpTable, member ids: %v, mod blob ptrs: %v, group id: %d",
memberID, modblobPtrDNAT, groupID)

if err = SetMetaUdpTable(ctx, p4RtC, podIpAddr, portID, groupID, action); err != nil {
Expand All @@ -582,7 +594,7 @@ func InsertServiceRules(ctx context.Context, p4RtC *client.Client,
log.Errorf("Failed to TxBalanceUdpTable")
return
}
log.Debugf("Inserted into the table TxBalanceTcpTable, service ip: %s, service port: %d, group id: %d",
log.Debugf("Inserted into the table TxBalanceUdpTable, service ip: %s, service port: %d, group id: %d",
service.ClusterIp, uint16(service.Port), groupID)
}
default:
Expand Down Expand Up @@ -633,38 +645,54 @@ func DeleteServiceRules(ctx context.Context, p4RtC *client.Client,

switch service.Proto {
case "TCP":
log.Debugf("Deleting from table TxBalanceTcpTable, service ip: %s, service port: %d, group id: %d",
service.ClusterIp, uint16(service.Port), groupID)
if err = TxBalanceTcpTable(ctx, p4RtC, service.ClusterIp, uint16(service.Port), groupID, Delete); err != nil {
return err
}
log.Debugf("Deleting from table AsSl3TcpTable, member ids: %v, mod blob ptrs: %v, group id: %d",
memberID, modblobPtrDNAT, groupID)
if err = AsSl3TcpTable(ctx, p4RtC, memberID, modblobPtrDNAT, groupID, Delete); err != nil {
return nil
}
if err = SetMetaTcpTable(ctx, p4RtC, podIpAddrs, podPortIDs, 0, Delete); err != nil {
log.Debugf("Deleting from table SetMetaTcpTable, pod ip addrs: %v, port id: %d, group id: %d",
podIpAddrs, podPortIDs, groupID)
if err = SetMetaTcpTable(ctx, p4RtC, podIpAddrs, podPortIDs, groupID, Delete); err != nil {
return nil
}
if err = TxBalanceTcpTable(ctx, p4RtC, service.ClusterIp, uint16(service.Port), groupID, Delete); err != nil {
return err
}

case "UDP":
if err = AsSl3UdpTable(ctx, p4RtC, memberID, modblobPtrDNAT, groupID, Delete); err != nil {
log.Debugf("Deleting from table TxBalanceUdpTable, service ip: %s, service port: %d, group id: %d",
service.ClusterIp, uint16(service.Port), groupID)

if err = TxBalanceUdpTable(ctx, p4RtC, service.ClusterIp, uint16(service.Port), groupID, Delete); err != nil {
return nil
}
if err = SetMetaUdpTable(ctx, p4RtC, podIpAddrs, podPortIDs, 0, Delete); err != nil {
log.Debugf("Deleting from AsSl3UdpTable, member ids: %v, mod blob ptrs: %v, group id: %d",
memberID, modblobPtrDNAT, groupID)
if err = AsSl3UdpTable(ctx, p4RtC, memberID, modblobPtrDNAT, groupID, Delete); err != nil {
return nil
}
if err = TxBalanceUdpTable(ctx, p4RtC, service.ClusterIp, uint16(service.Port), groupID, Delete); err != nil {
log.Debugf("Deleting from table SetMetaUdpTable, pod ip addrs: %v, port id: %d, group id: %d",
podIpAddrs, podPortIDs, groupID)
if err = SetMetaUdpTable(ctx, p4RtC, podIpAddrs, podPortIDs, groupID, Delete); err != nil {
return nil
}
default:
log.Errorf("Invalid protocol type")
return nil
}

log.Debugf("Deleting from table WriteDestIpTable, mod blob ptrs: %v", modblobPtrDNAT)
err = WriteDestIpTable(ctx, p4RtC, nil, nil, modblobPtrDNAT, Delete)
if err != nil {
return err
}

log.Debugf("Deleting from table WriteSourceIpTable, group id: %d", groupID)
err = WriteSourceIpTable(ctx, p4RtC, groupID, "", 0, Delete)
if err != nil {
return nil
return err
}

return nil
Expand Down

0 comments on commit ccedf2c

Please sign in to comment.