@@ -49,29 +49,64 @@ func pingGateway(gw, src string, verbose bool, maxRetry int) (count int, err err
49
49
}
50
50
51
51
func configureGlobalMirror (portName string , mtu int ) error {
52
- raw , err := ovs .Exec (ovs .MayExist , "add-port" , "br-int" , portName , "--" ,
53
- "set" , "interface" , portName , "type=internal" , "--" ,
54
- "clear" , "bridge" , "br-int" , "mirrors" , "--" ,
55
- "--id=@mirror0" , "get" , "port" , portName , "--" ,
56
- "--id=@m" , "create" , "mirror" , fmt .Sprintf ("name=%s" , util .MirrorDefaultName ), "select_all=true" , "output_port=@mirror0" , "--" ,
57
- "add" , "bridge" , "br-int" , "mirrors" , "@m" )
52
+ nicExist , err := linkExists (portName )
58
53
if err != nil {
59
- klog .Errorf ("failed to configure mirror nic %s %q" , portName , raw )
60
- return fmt .Errorf (raw )
54
+ return err
61
55
}
56
+
57
+ if ! nicExist {
58
+ raw , err := ovs .Exec (ovs .MayExist , "add-port" , "br-int" , portName , "--" ,
59
+ "set" , "interface" , portName , "type=internal" , "--" ,
60
+ "clear" , "bridge" , "br-int" , "mirrors" , "--" ,
61
+ "--id=@mirror0" , "get" , "port" , portName , "--" ,
62
+ "--id=@m" , "create" , "mirror" , fmt .Sprintf ("name=%s" , util .MirrorDefaultName ), "select_all=true" , "output_port=@mirror0" , "--" ,
63
+ "add" , "bridge" , "br-int" , "mirrors" , "@m" )
64
+ if err != nil {
65
+ klog .Errorf ("failed to configure mirror nic %s %q" , portName , raw )
66
+ return fmt .Errorf (raw )
67
+ }
68
+ } else {
69
+ raw , err := ovs .Exec (ovs .MayExist , "add-port" , "br-int" , portName , "--" ,
70
+ "clear" , "bridge" , "br-int" , "mirrors" , "--" ,
71
+ "--id=@mirror0" , "get" , "port" , portName , "--" ,
72
+ "--id=@m" , "create" , "mirror" , fmt .Sprintf ("name=%s" , util .MirrorDefaultName ), "select_all=true" , "output_port=@mirror0" , "--" ,
73
+ "add" , "bridge" , "br-int" , "mirrors" , "@m" )
74
+ if err != nil {
75
+ klog .Errorf ("failed to configure mirror nic %s %q" , portName , raw )
76
+ return fmt .Errorf (raw )
77
+ }
78
+ }
79
+
62
80
return configureMirrorLink (portName , mtu )
63
81
}
64
82
65
83
func configureEmptyMirror (portName string , mtu int ) error {
66
- raw , err := ovs .Exec (ovs .MayExist , "add-port" , "br-int" , portName , "--" ,
67
- "set" , "interface" , portName , "type=internal" , "--" ,
68
- "clear" , "bridge" , "br-int" , "mirrors" , "--" ,
69
- "--id=@mirror0" , "get" , "port" , portName , "--" ,
70
- "--id=@m" , "create" , "mirror" , fmt .Sprintf ("name=%s" , util .MirrorDefaultName ), "output_port=@mirror0" , "--" ,
71
- "add" , "bridge" , "br-int" , "mirrors" , "@m" )
84
+ nicExist , err := linkExists (portName )
72
85
if err != nil {
73
- klog .Errorf ("failed to configure mirror nic %s %q" , portName , raw )
74
- return fmt .Errorf (raw )
86
+ return err
87
+ }
88
+
89
+ if ! nicExist {
90
+ raw , err := ovs .Exec (ovs .MayExist , "add-port" , "br-int" , portName , "--" ,
91
+ "set" , "interface" , portName , "type=internal" , "--" ,
92
+ "clear" , "bridge" , "br-int" , "mirrors" , "--" ,
93
+ "--id=@mirror0" , "get" , "port" , portName , "--" ,
94
+ "--id=@m" , "create" , "mirror" , fmt .Sprintf ("name=%s" , util .MirrorDefaultName ), "output_port=@mirror0" , "--" ,
95
+ "add" , "bridge" , "br-int" , "mirrors" , "@m" )
96
+ if err != nil {
97
+ klog .Errorf ("failed to configure mirror nic %s %q" , portName , raw )
98
+ return fmt .Errorf (raw )
99
+ }
100
+ } else {
101
+ raw , err := ovs .Exec (ovs .MayExist , "add-port" , "br-int" , portName , "--" ,
102
+ "clear" , "bridge" , "br-int" , "mirrors" , "--" ,
103
+ "--id=@mirror0" , "get" , "port" , portName , "--" ,
104
+ "--id=@m" , "create" , "mirror" , fmt .Sprintf ("name=%s" , util .MirrorDefaultName ), "output_port=@mirror0" , "--" ,
105
+ "add" , "bridge" , "br-int" , "mirrors" , "@m" )
106
+ if err != nil {
107
+ klog .Errorf ("failed to configure mirror nic %s %q" , portName , raw )
108
+ return fmt .Errorf (raw )
109
+ }
75
110
}
76
111
return configureMirrorLink (portName , mtu )
77
112
}
0 commit comments