Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ ROOT_DIR = $(shell pwd)
CNM_DIR = cnm/plugin
CNI_NET_DIR = cni/network/plugin
CNI_IPAM_DIR = cni/ipam/plugin
CNI_IPAMV6_DIR = cni/ipam/pluginv6
CNI_TELEMETRY_DIR = cni/telemetry/service
TELEMETRY_CONF_DIR = telemetry
CNS_DIR = cns/service
Expand Down Expand Up @@ -144,7 +145,8 @@ ENSURE_OUTPUT_DIR_EXISTS := $(shell mkdir -p $(OUTPUT_DIR))
azure-cnm-plugin: $(CNM_BUILD_DIR)/azure-vnet-plugin$(EXE_EXT) cnm-archive
azure-vnet: $(CNI_BUILD_DIR)/azure-vnet$(EXE_EXT)
azure-vnet-ipam: $(CNI_BUILD_DIR)/azure-vnet-ipam$(EXE_EXT)
azure-cni-plugin: azure-vnet azure-vnet-ipam azure-vnet-telemetry cni-archive
azure-vnet-ipamv6: $(CNI_BUILD_DIR)/azure-vnet-ipamv6$(EXE_EXT)
azure-cni-plugin: azure-vnet azure-vnet-ipam azure-vnet-ipamv6 azure-vnet-telemetry cni-archive
azure-cns: $(CNS_BUILD_DIR)/azure-cns$(EXE_EXT) cns-archive
azure-vnet-telemetry: $(CNI_BUILD_DIR)/azure-vnet-telemetry$(EXE_EXT)

Expand Down Expand Up @@ -184,6 +186,10 @@ $(CNI_BUILD_DIR)/azure-vnet$(EXE_EXT): $(CNIFILES)
$(CNI_BUILD_DIR)/azure-vnet-ipam$(EXE_EXT): $(CNIFILES)
go build -v -o $(CNI_BUILD_DIR)/azure-vnet-ipam$(EXE_EXT) -ldflags "-X main.version=$(VERSION) -s -w" $(CNI_IPAM_DIR)/*.go

# Build the Azure CNI IPAMV6 plugin.
$(CNI_BUILD_DIR)/azure-vnet-ipamv6$(EXE_EXT): $(CNIFILES)
go build -v -o $(CNI_BUILD_DIR)/azure-vnet-ipamv6$(EXE_EXT) -ldflags "-X main.version=$(VERSION) -s -w" $(CNI_IPAMV6_DIR)/*.go

# Build the Azure CNI telemetry plugin.
$(CNI_BUILD_DIR)/azure-vnet-telemetry$(EXE_EXT): $(CNIFILES)
go build -v -o $(CNI_BUILD_DIR)/azure-vnet-telemetry$(EXE_EXT) -ldflags "-X main.version=$(VERSION) -X $(ACN_PACKAGE_PATH)/telemetry.aiMetadata=$(CNI_AI_ID) -s -w" $(CNI_TELEMETRY_DIR)/*.go
Expand Down Expand Up @@ -314,8 +320,8 @@ publish-azure-cns-image:
cni-archive:
cp cni/azure-$(GOOS).conflist $(CNI_BUILD_DIR)/10-azure.conflist
cp telemetry/azure-vnet-telemetry.config $(CNI_BUILD_DIR)/azure-vnet-telemetry.config
chmod 0755 $(CNI_BUILD_DIR)/azure-vnet$(EXE_EXT) $(CNI_BUILD_DIR)/azure-vnet-ipam$(EXE_EXT) $(CNI_BUILD_DIR)/azure-vnet-telemetry$(EXE_EXT)
cd $(CNI_BUILD_DIR) && $(ARCHIVE_CMD) $(CNI_ARCHIVE_NAME) azure-vnet$(EXE_EXT) azure-vnet-ipam$(EXE_EXT) azure-vnet-telemetry$(EXE_EXT) 10-azure.conflist azure-vnet-telemetry.config
chmod 0755 $(CNI_BUILD_DIR)/azure-vnet$(EXE_EXT) $(CNI_BUILD_DIR)/azure-vnet-ipam$(EXE_EXT) $(CNI_BUILD_DIR)/azure-vnet-ipamv6$(EXE_EXT) $(CNI_BUILD_DIR)/azure-vnet-telemetry$(EXE_EXT)
cd $(CNI_BUILD_DIR) && $(ARCHIVE_CMD) $(CNI_ARCHIVE_NAME) azure-vnet$(EXE_EXT) azure-vnet-ipam$(EXE_EXT) azure-vnet-ipamv6$(EXE_EXT) azure-vnet-telemetry$(EXE_EXT) 10-azure.conflist azure-vnet-telemetry.config
chown $(BUILD_USER):$(BUILD_USER) $(CNI_BUILD_DIR)/$(CNI_ARCHIVE_NAME)
mkdir -p $(CNI_MULTITENANCY_BUILD_DIR)
cp cni/azure-$(GOOS)-multitenancy.conflist $(CNI_MULTITENANCY_BUILD_DIR)/10-azure.conflist
Expand Down Expand Up @@ -371,5 +377,6 @@ test-all:
./cnm/network/ \
./cni/ipam/ \
./cns/ipamclient/ \
./cnms/service/ \
./npm/iptm/ \
./npm/ipsm/
./npm/ipsm/
1 change: 1 addition & 0 deletions aitelemetry/telemetrywrapper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ func TestMain(m *testing.M) {
}

log.Close()
hostAgent.Stop()
os.Exit(exitCode)
}

Expand Down
11 changes: 10 additions & 1 deletion cni/ipam/ipam.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ import (
cniTypesCurr "github.com/containernetworking/cni/pkg/types/current"
)

const (
ipamV6 = "azure-vnet-ipamv6"
)

var (
ipv4DefaultRouteDstPrefix = net.IPNet{net.IPv4zero, net.IPv4Mask(0, 0, 0, 0)}
)
Expand Down Expand Up @@ -154,8 +158,13 @@ func (plugin *ipamPlugin) Add(args *cniSkel.CmdArgs) error {
options := make(map[string]string)
options[ipam.OptInterfaceName] = nwCfg.Master

isIpv6 := false
if nwCfg.Ipam.Type == ipamV6 {
isIpv6 = true
}

// Allocate an address pool.
poolID, subnet, err = plugin.am.RequestPool(nwCfg.Ipam.AddrSpace, "", "", options, false)
poolID, subnet, err = plugin.am.RequestPool(nwCfg.Ipam.AddrSpace, "", "", options, isIpv6)
if err != nil {
err = plugin.Errorf("Failed to allocate pool: %v", err)
return err
Expand Down
80 changes: 80 additions & 0 deletions cni/ipam/pluginv6/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// Copyright 2017 Microsoft. All rights reserved.
// MIT License

package main

import (
"fmt"
"os"

"github.com/Azure/azure-container-networking/cni"
"github.com/Azure/azure-container-networking/cni/ipam"
"github.com/Azure/azure-container-networking/common"
"github.com/Azure/azure-container-networking/log"
)

const (
name = "azure-vnet-ipamv6"
)

// Version is populated by make during build.
var version string

// Main is the entry point for CNI IPAM plugin.
func main() {
var config common.PluginConfig
config.Version = version
logDirectory := "" // Sets the current location as log directory

log.SetName(name)
log.SetLevel(log.LevelInfo)
if err := log.SetTargetLogDirectory(log.TargetLogfile, logDirectory); err != nil {
fmt.Printf("Failed to setup cni logging: %v\n", err)
return
}

defer log.Close()

ipamPlugin, err := ipam.NewPlugin(name, &config)
if err != nil {
fmt.Printf("Failed to create IPAM plugin, err:%v.\n", err)
os.Exit(1)
}

if err := ipamPlugin.Plugin.InitializeKeyValueStore(&config); err != nil {
fmt.Printf("Failed to initialize key-value store of ipam plugin, err:%v.\n", err)

if isSafe, _ := ipamPlugin.Plugin.IsSafeToRemoveLock(ipamPlugin.Plugin.Name); isSafe {
log.Printf("[IPAM] Removing lock file as process holding lock exited")
if errUninit := ipamPlugin.Plugin.UninitializeKeyValueStore(true); errUninit != nil {
log.Errorf("Failed to uninitialize key-value store of network plugin, err:%v.\n", errUninit)
}
}

os.Exit(1)
}

defer func() {
if errUninit := ipamPlugin.Plugin.UninitializeKeyValueStore(false); errUninit != nil {
fmt.Printf("Failed to uninitialize key-value store of ipam plugin, err:%v.\n", err)
}

if recover() != nil {
os.Exit(1)
}
}()

err = ipamPlugin.Start(&config)
if err != nil {
fmt.Printf("Failed to start IPAM plugin, err:%v.\n", err)
panic("ipam plugin fatal error")
}

err = ipamPlugin.Execute(cni.PluginApi(ipamPlugin))

ipamPlugin.Stop()

if err != nil {
panic("ipam plugin fatal error")
}
}
3 changes: 3 additions & 0 deletions cni/netconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ type NetworkConfig struct {
LogLevel string `json:"logLevel,omitempty"`
LogTarget string `json:"logTarget,omitempty"`
InfraVnetAddressSpace string `json:"infraVnetAddressSpace,omitempty"`
IPV6Mode string `json:"ipv6Mode,omitempty"`
ServiceCidrs string `json:"serviceCidrs,omitempty"`
VnetCidrs string `json:"vnetCidrs,omitempty"`
PodNamespaceForDualNetwork []string `json:"podNamespaceForDualNetwork,omitempty"`
IPsToRouteViaHost []string `json:"ipsToRouteViaHost,omitempty"`
MultiTenancy bool `json:"multiTenancy,omitempty"`
Expand Down
Loading