66package network
77
88import (
9+ "crypto/sha1"
10+ "encoding/hex"
911"fmt"
1012"net"
1113
@@ -19,28 +21,45 @@ const (
1921commonInterfacePrefix = "az"
2022
2123// Prefix for host virtual network interface names.
22- hostVEthInterfacePrefix = commonInterfacePrefix + "veth "
24+ hostVEthInterfacePrefix = commonInterfacePrefix + "v "
2325
2426// Prefix for container network interface names.
2527containerInterfacePrefix = "eth"
2628)
2729
30+ func generateVethName (key string ) string {
31+ h := sha1 .New ()
32+ h .Write ([]byte (key ))
33+ return hex .EncodeToString (h .Sum (nil ))[:11 ]
34+ }
35+
2836// newEndpointImpl creates a new endpoint in the network.
2937func (nw * network ) newEndpointImpl (epInfo * EndpointInfo ) (* endpoint , error ) {
3038var containerIf * net.Interface
3139var ns * Namespace
3240var ep * endpoint
3341var err error
42+ var hostIfName string
43+ var contIfName string
3444
3545if nw .Endpoints [epInfo .Id ] != nil {
36- log .Printf ("[net] Endpoint alreday exists." )
46+ log .Printf ("[net] Endpoint alreday exists." )
3747err = errEndpointExists
3848return nil , err
3949}
4050
41- // Create a veth pair.
42- hostIfName := fmt .Sprintf ("%s%s" , hostVEthInterfacePrefix , epInfo .Id [:7 ])
43- contIfName := fmt .Sprintf ("%s%s-2" , hostVEthInterfacePrefix , epInfo .Id [:7 ])
51+ if _ , ok := epInfo .Data [OptVethName ]; ok {
52+ log .Printf ("Generate veth name based on the key provided" )
53+ key := epInfo .Data [OptVethName ].(string )
54+ vethname := generateVethName (key )
55+ hostIfName = fmt .Sprintf ("%s%s" , hostVEthInterfacePrefix , vethname )
56+ contIfName = fmt .Sprintf ("%s%s2" , hostVEthInterfacePrefix , vethname )
57+ } else {
58+ // Create a veth pair.
59+ log .Printf ("Generate veth name based on endpoint id" )
60+ hostIfName = fmt .Sprintf ("%s%s" , hostVEthInterfacePrefix , epInfo .Id [:7 ])
61+ contIfName = fmt .Sprintf ("%s%s-2" , hostVEthInterfacePrefix , epInfo .Id [:7 ])
62+ }
4463
4564log .Printf ("[net] Creating veth pair %v %v." , hostIfName , contIfName )
4665
0 commit comments