diff --git a/dataplane/saiserver/routing.go b/dataplane/saiserver/routing.go index f4ccc625f..fc3024100 100644 --- a/dataplane/saiserver/routing.go +++ b/dataplane/saiserver/routing.go @@ -135,13 +135,25 @@ func newNextHopGroup(mgr *attrmgr.AttrMgr, dataplane switchDataplaneAPI, s *grpc func (nhg *nextHopGroup) CreateNextHopGroup(ctx context.Context, req *saipb.CreateNextHopGroupRequest) (*saipb.CreateNextHopGroupResponse, error) { id := nhg.mgr.NextID() + entry := fwdconfig.TableEntryAddRequest(nhg.dataplane.ID(), NHGTable).AppendEntry( + fwdconfig.EntryDesc(fwdconfig.ExactEntry( + fwdconfig.PacketFieldBytes(fwdpb.PacketFieldNum_PACKET_FIELD_NUM_NEXT_HOP_GROUP_ID).WithUint64(id), + )), + ).Build() + switch req.GetType() { case saipb.NextHopGroupType_NEXT_HOP_GROUP_TYPE_DYNAMIC_UNORDERED_ECMP: + if _, err := nhg.dataplane.TableEntryAdd(ctx, entry); err != nil { + return nil, err + } nhg.groups[id] = map[uint64]*groupMember{} return &saipb.CreateNextHopGroupResponse{ Oid: id, }, nil case saipb.NextHopGroupType_NEXT_HOP_GROUP_TYPE_ECMP_WITH_MEMBERS: + if _, err := nhg.dataplane.TableEntryAdd(ctx, entry); err != nil { + return nil, err + } nhg.groups[id] = map[uint64]*groupMember{} memReq := &saipb.CreateNextHopGroupMembersRequest{} diff --git a/dataplane/saiserver/routing_test.go b/dataplane/saiserver/routing_test.go index 633f3af4d..34f809113 100644 --- a/dataplane/saiserver/routing_test.go +++ b/dataplane/saiserver/routing_test.go @@ -274,7 +274,7 @@ func TestCreateNextHopGroupMember(t *testing.T) { if gotErr != nil { return } - if d := cmp.Diff(dplane.gotEntryAddReqs[0], tt.wantReq, protocmp.Transform()); d != "" { + if d := cmp.Diff(dplane.gotEntryAddReqs[1], tt.wantReq, protocmp.Transform()); d != "" { t.Errorf("CreateNextHopGroupMember() failed: diff(-got,+want)\n:%s", d) } attr := &saipb.NextHopGroupMemberAttribute{} @@ -406,7 +406,7 @@ func TestRemoveNextHopGroupMember(t *testing.T) { return } - if d := cmp.Diff(dplane.gotEntryAddReqs[2], tt.wantReq, protocmp.Transform()); d != "" { + if d := cmp.Diff(dplane.gotEntryAddReqs[3], tt.wantReq, protocmp.Transform()); d != "" { t.Errorf("RemoveNextHopGroupMember() failed: diff(-got,+want)\n:%s", d) } attr := &saipb.NextHopGroupMemberAttribute{}