@@ -11,8 +11,9 @@ import (
1111)
1212
1313const (
14- FAKE_GW_IP = "169.254.1.1/32"
15- DEFAULT_GW = "0.0.0.0/0"
14+ virtualGwIPString = "169.254.1.1/32"
15+ defaultGwCidr = "0.0.0.0/0"
16+ defaultGw = "0.0.0.0"
1617)
1718
1819type TransparentEndpointClient struct {
@@ -147,7 +148,44 @@ func (client *TransparentEndpointClient) ConfigureContainerInterfacesAndRoutes(e
147148 return err
148149 }
149150
150- return addRoutes (client .containerVethName , epInfo .Routes )
151+ //ip route del 10.240.0.0/12 dev eth0 (removing kernel subnet route added by above call)
152+ for _ , ipAddr := range epInfo .IPAddresses {
153+ _ , ipnet , _ := net .ParseCIDR (ipAddr .String ())
154+ routeInfo := RouteInfo {
155+ Dst : * ipnet ,
156+ Scope : netlink .RT_SCOPE_LINK ,
157+ Protocol : netlink .RTPROT_KERNEL ,
158+ }
159+ if err := deleteRoutes (client .containerVethName , []RouteInfo {routeInfo }); err != nil {
160+ return err
161+ }
162+ }
163+
164+ //add route for virtualgwip
165+ //ip route add 169.254.1.1/32 dev eth0
166+ virtualGwIP , virtualGwNet , _ := net .ParseCIDR (virtualGwIPString )
167+ routeInfo := RouteInfo {
168+ Dst : * virtualGwNet ,
169+ Scope : netlink .RT_SCOPE_LINK ,
170+ }
171+ if err := addRoutes (client .containerVethName , []RouteInfo {routeInfo }); err != nil {
172+ return err
173+ }
174+
175+ //ip route add default via 169.254.1.1 dev eth0
176+ _ , defaultIPNet , _ := net .ParseCIDR (defaultGwCidr )
177+ dstIP := net.IPNet {IP : net .ParseIP (defaultGw ), Mask : defaultIPNet .Mask }
178+ routeInfo = RouteInfo {
179+ Dst : dstIP ,
180+ Gw : virtualGwIP ,
181+ }
182+ if err := addRoutes (client .containerVethName , []RouteInfo {routeInfo }); err != nil {
183+ return err
184+ }
185+
186+ //arp -s 169.254.1.1 e3:45:f4:ac:34:12 - add static arp entry for virtualgwip to hostveth interface mac
187+ log .Printf ("[net] Adding static arp for IP address %v and MAC %v in Container namespace" , virtualGwNet .String (), client .hostVethMac )
188+ return netlink .AddOrRemoveStaticArp (netlink .ADD , client .containerVethName , virtualGwNet .IP , client .hostVethMac , false )
151189}
152190
153191func (client * TransparentEndpointClient ) DeleteEndpoints (ep * endpoint ) error {
0 commit comments