@@ -10,6 +10,7 @@ import (
1010 "net"
1111 "os"
1212 "os/exec"
13+ "reflect"
1314 "sort"
1415 "strings"
1516 "syscall"
@@ -919,13 +920,178 @@ func TestLinkAddDelVlan(t *testing.T) {
919920 t .Fatal (err )
920921 }
921922
922- testLinkAddDel (t , & Vlan {LinkAttrs {Name : "bar" , ParentIndex : parent .Attrs ().Index }, 900 , VLAN_PROTOCOL_8021Q })
923+ testLinkAddDel (t , & Vlan {
924+ LinkAttrs : LinkAttrs {
925+ Name : "bar" ,
926+ ParentIndex : parent .Attrs ().Index ,
927+ },
928+ VlanId : 900 ,
929+ VlanProtocol : VLAN_PROTOCOL_8021Q ,
930+ })
923931
924932 if err := LinkDel (parent ); err != nil {
925933 t .Fatal (err )
926934 }
927935}
928936
937+ func TestLinkAddVlanWithQosMaps (t * testing.T ) {
938+ tearDown := setUpNetlinkTest (t )
939+ defer tearDown ()
940+
941+ parent := & Dummy {LinkAttrs {Name : "foo" }}
942+ if err := LinkAdd (parent ); err != nil {
943+ t .Fatal (err )
944+ }
945+
946+ ingressMap := map [uint32 ]uint32 {
947+ 0 : 2 ,
948+ 1 : 3 ,
949+ 2 : 5 ,
950+ }
951+
952+ egressMap := map [uint32 ]uint32 {
953+ 1 : 3 ,
954+ 2 : 5 ,
955+ 3 : 7 ,
956+ }
957+
958+ vlan := & Vlan {
959+ LinkAttrs : LinkAttrs {Name : "bar" , ParentIndex : parent .Attrs ().Index },
960+ VlanId : 900 ,
961+ VlanProtocol : VLAN_PROTOCOL_8021Q ,
962+ IngressQosMap : ingressMap ,
963+ EgressQosMap : egressMap ,
964+ }
965+ if err := LinkAdd (vlan ); err != nil {
966+ t .Fatal (err )
967+ }
968+
969+ link , err := LinkByName ("bar" )
970+ if err != nil {
971+ t .Fatal (err )
972+ }
973+
974+ if vlan , ok := link .(* Vlan ); ! ok {
975+ t .Fatalf ("unexpected link type: %T" , link )
976+ } else {
977+ if ! reflect .DeepEqual (vlan .IngressQosMap , ingressMap ) {
978+ t .Fatalf ("expected ingress qos map to be %v, got %v" , ingressMap , vlan .IngressQosMap )
979+ }
980+ if ! reflect .DeepEqual (vlan .EgressQosMap , egressMap ) {
981+ t .Fatalf ("expected egress qos map to be %v, got %v" , egressMap , vlan .EgressQosMap )
982+ }
983+ }
984+ }
985+
986+ func TestLinkAddVlanWithFlags (t * testing.T ) {
987+ tearDown := setUpNetlinkTest (t )
988+ defer tearDown ()
989+
990+ parent := & Dummy {LinkAttrs {Name : "foo" }}
991+ if err := LinkAdd (parent ); err != nil {
992+ t .Fatal (err )
993+ }
994+ valueTrue := true
995+ valueFalse := false
996+ vlan := & Vlan {
997+ LinkAttrs : LinkAttrs {Name : "bar" , ParentIndex : parent .Attrs ().Index },
998+ VlanId : 900 ,
999+ VlanProtocol : VLAN_PROTOCOL_8021Q ,
1000+ Gvrp : & valueTrue ,
1001+ Mvrp : & valueFalse ,
1002+ BridgeBinding : & valueFalse ,
1003+ LooseBinding : & valueFalse ,
1004+ ReorderHdr : & valueTrue ,
1005+ }
1006+ if err := LinkAdd (vlan ); err != nil {
1007+ t .Fatal (err )
1008+ }
1009+
1010+ link , err := LinkByName ("bar" )
1011+ if err != nil {
1012+ t .Fatal (err )
1013+ }
1014+
1015+ if vlan , ok := link .(* Vlan ); ! ok {
1016+ t .Fatalf ("unexpected link type: %T" , link )
1017+ } else {
1018+ if vlan .Gvrp == nil || * vlan .Gvrp != true {
1019+ t .Fatalf ("expected gvrp to be true, got %v" , vlan .Gvrp )
1020+ }
1021+ if vlan .Mvrp == nil || * vlan .Mvrp != false {
1022+ t .Fatalf ("expected mvrp to be false, got %v" , vlan .Mvrp )
1023+ }
1024+ if vlan .BridgeBinding == nil || * vlan .BridgeBinding != false {
1025+ t .Fatalf ("expected bridge binding to be false, got %v" , vlan .BridgeBinding )
1026+ }
1027+ if vlan .LooseBinding == nil || * vlan .LooseBinding != false {
1028+ t .Fatalf ("expected loose binding to be false, got %v" , vlan .LooseBinding )
1029+ }
1030+ if vlan .ReorderHdr == nil || * vlan .ReorderHdr != true {
1031+ t .Fatalf ("expected reorder hdr to be true, got %v" , vlan .ReorderHdr )
1032+ }
1033+ }
1034+ }
1035+
1036+ func TestLinkModifyVlanFlags (t * testing.T ) {
1037+ tearDown := setUpNetlinkTest (t )
1038+ defer tearDown ()
1039+
1040+ parent := & Dummy {LinkAttrs {Name : "foo" }}
1041+ if err := LinkAdd (parent ); err != nil {
1042+ t .Fatal (err )
1043+ }
1044+ valueTrue := true
1045+ valueFalse := false
1046+ vlan := & Vlan {
1047+ LinkAttrs : LinkAttrs {Name : "bar" , ParentIndex : parent .Attrs ().Index },
1048+ VlanId : 900 ,
1049+ VlanProtocol : VLAN_PROTOCOL_8021Q ,
1050+ Gvrp : & valueTrue ,
1051+ Mvrp : & valueFalse ,
1052+ BridgeBinding : & valueFalse ,
1053+ LooseBinding : & valueFalse ,
1054+ ReorderHdr : & valueTrue ,
1055+ }
1056+ if err := LinkAdd (vlan ); err != nil {
1057+ t .Fatal (err )
1058+ }
1059+
1060+ vlan = & Vlan {
1061+ LinkAttrs : LinkAttrs {Name : "bar" },
1062+ BridgeBinding : & valueTrue ,
1063+ }
1064+
1065+ if err := LinkModify (vlan ); err != nil {
1066+ t .Fatal (err )
1067+ }
1068+
1069+ link , err := LinkByName ("bar" )
1070+ if err != nil {
1071+ t .Fatal (err )
1072+ }
1073+
1074+ if vlan , ok := link .(* Vlan ); ! ok {
1075+ t .Fatalf ("unexpected link type: %T" , link )
1076+ } else {
1077+ if vlan .Gvrp == nil || * vlan .Gvrp != true {
1078+ t .Fatalf ("expected gvrp to be true, got %v" , vlan .Gvrp )
1079+ }
1080+ if vlan .Mvrp == nil || * vlan .Mvrp != false {
1081+ t .Fatalf ("expected mvrp to be false, got %v" , vlan .Mvrp )
1082+ }
1083+ if vlan .BridgeBinding == nil || * vlan .BridgeBinding != true {
1084+ t .Fatalf ("expected bridge binding to be true, got %v" , vlan .BridgeBinding )
1085+ }
1086+ if vlan .LooseBinding == nil || * vlan .LooseBinding != false {
1087+ t .Fatalf ("expected loose binding to be false, got %v" , vlan .LooseBinding )
1088+ }
1089+ if vlan .ReorderHdr == nil || * vlan .ReorderHdr != true {
1090+ t .Fatalf ("expected reorder hdr to be true, got %v" , vlan .ReorderHdr )
1091+ }
1092+ }
1093+ }
1094+
9291095func TestLinkAddDelMacvlan (t * testing.T ) {
9301096 tearDown := setUpNetlinkTest (t )
9311097 defer tearDown ()
0 commit comments