@@ -552,3 +552,203 @@ TEST(Meta, meta_validate_stats)
552552
553553 EXPECT_EQ (SAI_STATUS_INVALID_PARAMETER, m.call_meta_validate_stats (SAI_OBJECT_TYPE_VIRTUAL_ROUTER, vrId, 2 , counter_ids, counters, SAI_STATS_MODE_READ));
554554}
555+
556+ TEST (Meta, quad_my_sid_entry)
557+ {
558+ Meta m (std::make_shared<MetaTestSaiInterface>());
559+
560+ sai_object_id_t switchId = 0 ;
561+
562+ sai_attribute_t attr;
563+
564+ attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
565+ attr.value .booldata = true ;
566+
567+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , &attr));
568+
569+ sai_object_id_t vlanId = 0 ;
570+
571+ attr.id = SAI_VLAN_ATTR_VLAN_ID;
572+ attr.value .u16 = 2 ;
573+
574+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_VLAN, &vlanId, switchId, 1 , &attr));
575+
576+ sai_object_id_t vrId = 0 ;
577+
578+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_VIRTUAL_ROUTER, &vrId, switchId, 0 , &attr));
579+
580+ sai_attribute_t attrs[2 ];
581+
582+ attrs[0 ].id = SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR;
583+ attrs[0 ].value .s32 = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E;
584+
585+ sai_my_sid_entry_t e;
586+
587+ memset (&e, 0 , sizeof (e));
588+
589+ e.switch_id = switchId;
590+ e.vr_id = vrId;
591+
592+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (&e, 1 , attrs));
593+
594+ attr.id = SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR;
595+ attr.value .s32 = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_X;
596+
597+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.set (&e, &attr));
598+
599+ attr.id = SAI_MCAST_FDB_ENTRY_ATTR_GROUP_ID;
600+
601+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.get (&e, 1 , &attr));
602+
603+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.remove (&e));
604+ }
605+
606+ TEST (Meta, quad_bulk_route_entry)
607+ {
608+ Meta m (std::make_shared<MetaTestSaiInterface>());
609+
610+ sai_object_id_t switchId = 0 ;
611+
612+ sai_attribute_t attr;
613+
614+ attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
615+ attr.value .booldata = true ;
616+
617+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , &attr));
618+
619+ sai_object_id_t vlanId = 0 ;
620+
621+ attr.id = SAI_VLAN_ATTR_VLAN_ID;
622+ attr.value .u16 = 2 ;
623+
624+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_VLAN, &vlanId, switchId, 1 , &attr));
625+
626+ sai_object_id_t vrId = 0 ;
627+
628+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_VIRTUAL_ROUTER, &vrId, switchId, 0 , &attr));
629+
630+ // create
631+
632+ sai_route_entry_t e[2 ];
633+
634+ memset (e, 0 , sizeof (e));
635+
636+ e[0 ].switch_id = switchId;
637+ e[1 ].switch_id = switchId;
638+
639+ e[0 ].vr_id = vrId;
640+ e[1 ].vr_id = vrId;
641+
642+ e[0 ].destination .addr .ip4 = 1 ;
643+ e[1 ].destination .addr .ip4 = 2 ;
644+
645+ uint32_t attr_count[2 ];
646+
647+ attr_count[0 ] = 0 ;
648+ attr_count[1 ] = 0 ;
649+
650+ sai_attribute_t list1[2 ];
651+ sai_attribute_t list2[2 ];
652+
653+ std::vector<const sai_attribute_t *> alist;
654+
655+ alist.push_back (list1);
656+ alist.push_back (list2);
657+
658+ const sai_attribute_t **attr_list = alist.data ();
659+
660+ sai_status_t statuses[2 ];
661+
662+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkCreate (2 , e, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
663+
664+ // set
665+
666+ sai_attribute_t setlist[2 ];
667+
668+ setlist[0 ].id = SAI_ROUTE_ENTRY_ATTR_PACKET_ACTION;
669+ setlist[0 ].value .s32 = SAI_PACKET_ACTION_DROP;
670+
671+ setlist[1 ].id = SAI_ROUTE_ENTRY_ATTR_PACKET_ACTION;
672+ setlist[1 ].value .s32 = SAI_PACKET_ACTION_DROP;
673+
674+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkSet (2 , e, setlist, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
675+
676+ // remove
677+
678+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkRemove (2 , e, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
679+ }
680+
681+ TEST (Meta, quad_bulk_nat_entry)
682+ {
683+ Meta m (std::make_shared<MetaTestSaiInterface>());
684+
685+ sai_object_id_t switchId = 0 ;
686+
687+ sai_attribute_t attr;
688+
689+ attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
690+ attr.value .booldata = true ;
691+
692+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , &attr));
693+
694+ sai_object_id_t vlanId = 0 ;
695+
696+ attr.id = SAI_VLAN_ATTR_VLAN_ID;
697+ attr.value .u16 = 2 ;
698+
699+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_VLAN, &vlanId, switchId, 1 , &attr));
700+
701+ sai_object_id_t vrId = 0 ;
702+
703+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_VIRTUAL_ROUTER, &vrId, switchId, 0 , &attr));
704+
705+ // create
706+
707+ sai_nat_entry_t e[2 ];
708+
709+ memset (e, 0 , sizeof (e));
710+
711+ e[0 ].switch_id = switchId;
712+ e[1 ].switch_id = switchId;
713+
714+ e[0 ].vr_id = vrId;
715+ e[1 ].vr_id = vrId;
716+
717+ e[0 ].nat_type = SAI_NAT_TYPE_SOURCE_NAT;
718+ e[1 ].nat_type = SAI_NAT_TYPE_DESTINATION_NAT;
719+
720+ uint32_t attr_count[2 ];
721+
722+ attr_count[0 ] = 0 ;
723+ attr_count[1 ] = 0 ;
724+
725+ sai_attribute_t list1[2 ];
726+ sai_attribute_t list2[2 ];
727+
728+ std::vector<const sai_attribute_t *> alist;
729+
730+ alist.push_back (list1);
731+ alist.push_back (list2);
732+
733+ const sai_attribute_t **attr_list = alist.data ();
734+
735+ sai_status_t statuses[2 ];
736+
737+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkCreate (2 , e, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
738+
739+ // set
740+
741+ sai_attribute_t setlist[2 ];
742+
743+ setlist[0 ].id = SAI_NAT_ENTRY_ATTR_NAT_TYPE;
744+ setlist[0 ].value .s32 = SAI_NAT_TYPE_NONE;
745+
746+ setlist[1 ].id = SAI_NAT_ENTRY_ATTR_NAT_TYPE;
747+ setlist[1 ].value .s32 = SAI_NAT_TYPE_NONE;
748+
749+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkSet (2 , e, setlist, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
750+
751+ // remove
752+
753+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkRemove (2 , e, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
754+ }
0 commit comments