Граф коммитов

43 Коммитов

Автор SHA1 Сообщение Дата
Paul Yu ae690d2a70
add accelnet support on CNI (#2853)
* add accelnet support for CNI

* add uts for AccelnetNIC on CNI

* add more uts

* fix an ut

* fix uts

* add ut to endpoint_test

* add endpoint impl test cases for accelnet

* gofummpt windows test

* fix logic of accelnet

* fix logic of accelnet

* modify uts

* remove  an ut

* fix one ut issue

* accelnet interface should set default route

* fix some uts

* remove an ib ut

* fix comments

* fix comments and add uts

* add more uts

* fix an linter issue

* fix comments

* add comment for iov flag

* fix comments

* add endpoint deletion

* add HNSV2 check

* add UT to make sure endpoint and networ deletion called

* add a new test to make infraNIC network is not deleted

* add errMsg

* fix error msg

* add windows test cases for endpoint state deletion

* fix linter issue

* fix a linter issue

* remove hardcode hcniov flag

* comments fix

* add uts for transparent network deletion

* fix comment when hns id is empty

* fix the UT when hns id is empty

* skip linter issue

* change the delegatedVMNIC to NodeNetworkInterfaceFrontendNIC

* fix an ut

* fix add accelnet policy setting ut
2024-08-07 19:08:00 +00:00
QxBytes 469afea07c
test: add ut for populating network and endpoint hns id in endpoint and endpoint info structs (#2844)
* validate endpoint struct after endpoint creation

* add uts to validate endpoint info and endpoint structs have hns network and endpoint id fields populated

endpoint struct should have the hns endpoint id after new endpoint
endpoint info struct should have the hns endpoint id after new endpoint as well

network struct should have the hns network id after new network
endpoint info struct should have the hns network id after new network as well

endpoint struct should have the hns network id after new endpoint if endpoint info had it

* address linter issue

* address feedback by validating info sent to cns

* modify hnsv2 wrapper behavior to only set hns id if not already set for npm uts
2024-07-17 13:26:11 +00:00
Paul Yu 03e0447f32
add L1VH IB support on CNI (#2762)
* add L1VH IB support on CNI

* fix IB issues

* fix UT errors

* fix linter issues

* add win 2025 support for cni image build

* add and comments

* fix a logic bug

* disable endpoint creation and deletion if it's IB NIC

* fix a linter issue

* add UTs

* add UTs for powershell

* enhance Test_getInterfaceInfoKey test case

* remove windows 2025 build from pipeline

* fix some issues

* add an UT to test pnpID

* fix an issue

* fix an ut

* add double quotes

* unblock a brunch of issues

* remove unnecessary codes

* upgradelatest upstream cnii build

* fix a log

* add windows build on pipeline temporarily

* remove backendNIC check for findMasterInterface

* add ut to confirm IB does not create endpoint

* fix linter issue that use %q

* format network.go

* add more uts to cover powershell commands

* remove windows2025 pipeline build

* enhance logs

* fix cniResult format

* add getPnpidstate func

* fix the issue for infraNIC routes

* fix the issue for infraNIC routes

* fix gateway ip address

* add get-pnpdevice UT

* add accelnetNIC support for L1VH

* enhance logic for accelnet nic netowrk flag

* enhance network windows uts

* fix bitmask operator

* use another PR for accelnet PR

* gofumpt files

* fix comments for functional codes

* add uts

* add more uts

* fix uts

* fix functional codes comments

* Update cni/network/network.go

Co-authored-by: tamilmani1989 <tamanoha@microsoft.com>
Signed-off-by: Paul Yu <129891899+paulyufan2@users.noreply.github.com>

* fix latest comments

* fix an UT

* fix invoker_cns_test.go

* fix ut bugs

* fix ut with SkipDefaultRoutes

* add combination ut

* add combination ut

* add ncGateway address to ut

* fix an ut bug

* fix ut bug

* add unhappy test cases

* add endpoint add and deletion cases

* push mock network creation hns api test cases

* remove network creation hns call

* add uts to mock hns network and endpoint calls

* fix ut linter issues

* add infraNIC only invoker test case

* add unhappy path test case

* remove infraNIC only case

* remove unhappy test case

* re-archetect cni ib codes and test

* remove unnecessary logs

* save endpoint state

* save endpoint object for IB

* fix linter issue

* fix a brunch of linter issues

* fix linter issues

* fix linter issue

* fix ut for returned error msg

* temporary add manifest build for CNS/CNI to pipeline

* feedback fix

* fix linter issue

* add ut to get networkName and networkID

* remove Ankit's PR to build cns image

* revert Ankit's changes back

* remove win2025 build from pipeline

* log error for invalid mac address

* revert convertInterfaceInfoToCniResult impl

* fix feedback

* add crd changes to test

* add win2025 yaml to build image

* pass containerID to cns

* revert changes back for review

* revert changes back for review

* gofumpt endpoint.go

* remove comment

* add latest comments

* Update network/endpoint_windows.go

Co-authored-by: tamilmani1989 <tamanoha@microsoft.com>
Signed-off-by: Paul Yu <129891899+paulyufan2@users.noreply.github.com>

* fix a linter issue

* add error check

* add error check

* gofumpt endpoint windows test file

---------

Signed-off-by: Paul Yu <129891899+paulyufan2@users.noreply.github.com>
Co-authored-by: tamilmani1989 <tamanoha@microsoft.com>
2024-07-11 16:05:28 +00:00
QxBytes 2ab9cfe823
refactor: code changes for stateless cni and swift v2 (#2688)
* ci: changes up to endpointInternal

* ci: remove defaultInterface from invoker

* ci: change up to CreateEndpoint

* ci: changes up to CreateEndpoint()

* ci: invoker cns and UT fixes

* ci: add fixes to UT(s), capture non populated defaultInterface failures

* ci: multitenancy changes

* ci: invoker azure changes & remove all defaultInterfaceInfo possible

* ci add NICType to baremetal flow

* chore: address comments

* merge nw info fields to ep info and draft new createEndpoint function

* restruct ipamAddResult struct

* reorder code to create epinfo first, and then create network and ep based on epinfo

* add getNwInfo and generate ipamAddResult

* fix network windows.go

* create nw info first and create nw and ep dns info

* fix testIpamAddFail ut referencing wrong redeclared err variable, fix error message

* UT fix part one

* fix the getNetworkID and getNetworkInfo

* move create endpoint to network package, remove ifIndex as needed

* use function to get network id

* unify creation of nw and endpoint info by removing switch

* change functions to consume ep info instead of nw info

* remove unused variable accidentally added earlier

* update old azure ipam invoker to use ep info and change ids to network ids when appropriate

previously we renamed the NetworkInfo symbol to EndpointInfo in lots of places, but the Id in Network Info is NOT the same as Endpoint Info, so while the code compiles, code that previously used the id field of the network info struct would now be using the id field of the endpoint info struct. It should use the NetworkId field of the endpoint info struct instead.

* rename endpoint info id field to EndpointID to remove ambiguity

* change nw info to ep info in windows

* adjust comments

* move all methods in create ep info dependent on nw info to use ep info instead (windows and linux)

addSubnetToNetworkInfo, setNetworkOptions, and getEndpointPolicies. getEndpointPolicies will now take just the subnets needed as a parameter rather than the whole nw or ep info.

* make cnm compile (not necessarily correct)

* make all tests compile except endpoint test secondary client (windows and linux) (not necessarily correct)

* comment out endpoint test secondary endpoint client case to make tests compile

* address todos and comments from meeting

* remove duplicated code for populating address in ep info generation

* update EndpointCreate to support multiple infra nic

* save all endpoints to state, regardless of type, use either stateless or cni statefile

undos some changes in "move create endpoint to network package, remove ifIndex as needed"
deletion flow needs to figure out how to tell if the nic type is delegated
1 interface info : 1 endpoint info : 1 endpoint struct mapping

* fix dual nic support conditional and finding master interface ip

the master interface ip must be in a particular form where the last few bits are zeroed out based on the mask or we won't find the ip
for example, while the host subnet perfix is 10.224.0.113/16, the ip that should be passed into find master interface (subnet) should be 10.224.0.0/16 which matches one of the interfaces' ipnet (10.224.0.0/16)

* fix empty network name
when we need to create a network, we collect the network information, but if we do not find the network, we return an empty nw info and an error
when we create the endpoint we need to use endpoint info's network id, not the (possibly) empty network info struct's network id

* make network_test.go compile (linux and windows compile)

unit tests are not necessarily correct at this point

* add NICType to endpoint struct and populate it

important: when getting the endpoint state, the NIC Type field is not populated, leading to deletes not having a NIC Type; this should be changed so that getting the state populates that field
including the nic type allows us to simplify the secondary endpoints delete flow (just check if the nic type is delegated instead of checking if the secondary interfaces map is populated)

smoke tested:
linux aks podsubnet (same vm, multi vm, internet, cni statefile consistent)
linux standalone transparent vlan multitenancy (same vm, multi vm, internet, multi vnet, no connection between coke pepsi, cni statefile consistent)
windows standalone bridge multitenancy single customer (same vm connections, internet, dns only, cni statefile consistent, 2 pods deleting and recreating)

* ci: InterfaceInfo Map

* fix multitenancy_test ut by changing key

* add endpoint id to secondary ep info test since we populate the id in the actual flow

* fix cni network_test linux and ensure secondary create ep info does not break

in network_test we pass in sample delegated (secondary) data to Add which we then create endpoint info from
even with most fields empty, in linux, the ep info is created without erroring

* make invoker_cns_test linux pass

running all linux package tests for network and cni package pass (or also fail on master, like createBridge)
windows unit tests mostly all fail for the same ones on master and this branch
summary:
	- network_windows_test.go
		○ TestFailToAddIPv6DefaultRoute already fails on master
	- network_test.go
		○ 9 tests fail on master, 9 tests fail on my branch
	- manager_test.go
		○ 9 tests fail on master, 9 tests fail on my branch
	- endpoint_windows_test.go
		○ TestNewAndDeleteEndpointImplHnsV2 already timeouts on master
	- endpoint_test.go
		○ 9 tests fail on  master, 9 tests fail on my branch
	- network_windows_test.go
		○ FAIL: TestPluginSecondAddSamePodWindows/CNI_consecutive_add_already_hot_attached
		○ FAIL: TestPluginSecondAddSamePodWindows/CNI_consecutive_add_not_hot_attached
		○ We don't handle consecutive add anymore
	- network_test.go
		○ TestPluginMultitenancyAdd/Add_Happy_path fails on master and my branch (received multiple NC results [] from CNS while dualnic feature is not supported)-- we still get two items on our list/map though which is expected
	- invoker_cns_test passes
	- invoker_azure_test passes
        - multitenancy_test passes
The consecutive add tests fail but that is expected since we no longer support it.

* modify delete flow to handle multiple epinfos to delete

delete ALL endpoints related to the endpoint infos list in the event cni fails half-way through an add (one failed endpoint create and we delete all would-be-create endpoints and the state)
replace looping over deletion code "n" number of times with getting a slice of endpoint infos to delete
modify stateless cni code to retrieve a slice of network endpoint infos from a single response based on the container id (container id can be used in stateless cni for retrieval)
incorporate stateless cni changes from other branch (cns client/ipam/restserver changes)
modify get endpoint state to return slice of endpoint infos, and getting an endpoint will return an endpoint from that slice with nic type infra
move edge case where endpoint is not created in the state but ips are already allocated to immediately after retrieving all ep infos
fix mock behavior for getting all endpoints by container id
move getting network id and network info out of the loop because their values do not seem to change between iterations
move deletion of endpoint logic into a dedicated loop, and then create a dedicate loop for calling ipam delete to prevent inconsistent state

all expected unit tests on linux pass

* address feedback

* Make change to UpdateEndpointState API to support SwiftV2 for Stateless CNI

* change save state to only call update endpoint state once with a slice of endpoints, uts pass

* fix using nonexistent key by passing in current interface info directly

* fix azure ipam invoker not getting a populated network info for legacy cni

* add L1VH windows support

* add nic type to windows endpoints

* move adding an external interface code to run only when creating a new network

this change reflects prior behavior, where we would only add an external interface to the statefile if the network (after searching through all external interfaces) was not found
currently, if there are multiple interfaces that could be selected as the master, we would add each external interface to the statefile, even if the *network* is associated with one of the existing interfaces
while we would still always find the same network (thanks to having a constant NetworkId, regardless of the external interface), you could get an extra empty external interface in your statefile
this commit should remove that possibility (the extra external interface shouldn't really matter in the first place though because we always select the external interface that has a matching network created on it)
this should be os agnostic

* update comments, first todo check pass

* address some linter issues

* rename networkId to networkID in endpoint info

ran package tests in windows and linux for cni and network packages
ran package tests in linux for cns restserver
all have expected outputs (either pass, or also fails on master branch)

* address linter issues

* preserve more logs and reduce timeout for restart for debugging

* clean comments and rename for clarity

if we use the endpoint info for the network info fields, we name it nwInfo as a hint

* address more linter issues

linux network, restserver, and cni package tests pass

* Revert "preserve more logs and reduce timeout for restart for debugging"

This reverts commit 0f004925cf.

* ignore error on delete flow network query

if we are in stateful cni and do not find the network, we will not error, but when we search for the endpoint it will not be found, leading to us calling ipam invoker delete which is assumed idempotent before returning
previously we would error in stateful cni and return before calling ipam invoker delete

* delete network on endpoint delete if stateless and delegated vmnic (win + linux)

* add nic name, set nicname in linux to master interface name

stateless will key into interface map with the nicname field
in windows, the nicname field is based on the args ifname (usually eth0)
in linux, the nicname field is based on the master interface found (usually eth0)

note:
hostifname/hostvethname = linux veth pair peer in the host ns
ifname/contifname = linux veth pair peer in the container ns, in windows it's just the args ifname
nicname is something else
ifname isn't used during deletion in linux, hns id is used for deletion in windows

* return secondary interface as cni result if no infra nic found, include mac address in cni result

* address linter issue

* fix critical error where failing to add in windows stateless would lead to hns components not being deleted and add netns for hnsv2

tested by triggering a failure to save the stateless state and seeing that the hns endpoint and network are cleaned up
we use the endpoint info to clean up on "add" error, but previously, we didn't populate it with the hns ids to do so

adds netns to stateless as the presence of a valid guid in netns determines if hnsv2 is used

* set nicname used in stateless cni according to feedback

* add dummy guid to stateless delete since we assume stateless is always hnsv2

we assume that the netns value isn't used in stateless deletion

* clean up createEpInfo, declare endpoint info once

* address feedback from vipul

* change comments only

* revert change to cns package

* fix stateless cni migration flow not having nictype on migrate

* keep nwInfo variables named the same as before pr (noop)

* separate endpoint and network policies in endpoint info

behavior should not change except in hnsv1, where network policies passed into network create call will NOT include endpoint policies
endpoint policies always include network policies

* address feedback from reviewers

* address feedback and account for case where cns provides info without nic type

if nic type is empty from cns in invoker cns, we assume it is infra nic type and populate it with infra nic type

* address feedback to declare endpoint info once and populate all fields at once

moved add subnets to after endpoint info created
moved retrieval of all endpoint policies (from getEndpointPolicies and getPoliciesFromRuntimeCfg)until after endpoint info created
network policies are just passed in from the args unaltered

* use ifname instead of nicname field in endpoint struct as key in stateless

* convert macaddress only nictype is delegatedvmnic

* address feedback by removing network dns settings

* address linter issues (noop)

* address feedback and linter (noop)

* remove unused consecutive add funcs (noop)

* fix release ips when create a container without nictype using older cni and then upgrade cni and delete

if we create a pod with an older cni version, it won't have a nictype
if we upgrade cni and then delete, we should treat an empty nictype as an infra nictype and
call the invoker delete

* prevent eps with delegated nic type present on ep from also calling transparent endpoint client on delete

tested on swift v2 linux single pod add, change cni to this version, delete (ok)
then add using this cni version and delete, no extraneous transparent endpoint client calls logged

* mock get interface method for ut

searched for "NetPlugin" in all files and determined all prod use of NetPlugin goes through NewNetPlugin where we set the get interface method to the real interface get method
adds ut where the master interface (by mac) is not found

* address feedback (noop)

* add ut for handling empty nictype on cns add (noop)

* add multitenancy delete net not found ut (noop)

* add uts for multi interface infos single add call, verify endpoint id, cns to cni data conversion and vice versa, get endpoint info from container id (noop)

verifies partial success will delete all endpoints, even successfully created ones in the same cni add call

* add ut for all pods associated with container id delete in one del call, new secondary delete flow (noop)

* add two UTs

* fix a linter issue

* add ut to check endpoint ifname on new endpoint creation based on nictype (noop)

* add ut for fail to find interface by subnet (noop)

* Adding support for Stateless CNI Delete Edge case when there in no HNS ID

* fix uts

* fix linter issues

* fix ut

---------

Co-authored-by: jpayne3506 <payne.3506@gmail.com>
Co-authored-by: paulyufan2 <paulyu01@outlook.com>
Co-authored-by: AzureAhai <behzadm@microsoft.com>
2024-06-01 01:36:32 +00:00
Paul Yu 44dc74e5ec
[CNI] Migrate network and platform package logging to zap (#2209)
* network package zap logger

* add zaplogger for platform
2023-09-16 00:14:44 +00:00
Paul Yu a68d6382f4
add v6 port mapping policy to dualstack overlay (#1989)
* cosmic v6 port mapping policy fix
2023-06-08 03:27:56 +00:00
tamilmani1989 a82b312995
Set constant mac for host veth interface in transparent vlan mode (#1906)
* set constant mac for host veth interface

* fixed a race issue in transparent-vlan where delete can happen after add and removes route add by ADD call

* moved log to place where its executed

* enable proxy arp on bridge to allow public connectivity from apipa interface

* validate newly created namespace is not same as host namespace

* addressed comments and added UTs

* fixed cni delete call for linux multitenancy

* lint fixes

* windows lint fixes

* lint fixes

* fix issues with network namespace creation and vlan interface creation

* Removed deletehostveth flag and delete host veth on delete endpoint trigger

* lint fix

* address comment
2023-04-17 14:26:00 -07:00
Paul Yu 4b7a692a6a
add func GetNumEndpointsInNetNs() to support to get number of endpoints for deletion (#1828)
* add GetNumEndpointsInNetNs()

* fix gofumpt issue

* fix comments

* fix an UT

* combine two UTs

* combine two UTs
2023-03-01 21:43:51 -05:00
QxBytes a19e5fb5cd
feat: Add SNAT bridge to Native, decouple SNAT bridge (#1506)
* Native Endpoint Client Add Endpoints

* AddEndpointRules, ConfigureContainerInterfacesAndRoutes

* Changed interface names, log statements

nw.extIf.Name > eth0 (eth0)
eth0.vlanid > eth0.X (eth0.1)
%s%s hostIfName > vnet (A1veth0)
%s%s-2 contIfName > container (B1veth0)

* Renaming, using lib to set ns

* Namespace "path" is /var/run/netns/<NS>

* Loopback set up, Remove auto kernel subnet route

* Cannot set link to up if it's in another NS

* Multiple containers on same VNET NS

* Delete Endpoint routes on Delete

* Minimizing netns usage

* Moving NS Exec Code

* Further minimized netns.Set usage

* Moved helper methods down, drafted tests

* Removed DevName from Route Info, more tests

* Test existing vnet ns, delete endpoint

* NetNS interface for testing

* Separated tests by namespace

* Endpoints delete if they cannot be moved into NS

* Namespace netns tests

* Added Native Client to deleteEndpointImpl

* Deletion of Endpoints Impl and Tests

* Cleaned code (Tests ok)

* Moved mock/netns to package (Tests ok)

* Fixing Netns (wip)

Moved netnsinterface to consumer package (network).
Removed "Netns" from "NewNetns" and "NewMockNetns" as it is unambiguous.
Changed uintptr to int and casted the int to uintptr when needed later.

* Using errors.Wrap for error context (wip)

* Removed sentence case (wip)

* Removing variable predeclaration

* Removed NewNativeEndpointClient

Directly instantiating struct because nothing special happens in NewNativeEndpointClient

* Removed generics from ExecuteInNS

* Removed uintptr from mocknetns, tests compile

Forgot to remove uintptr from mocknetns

* Fix tests, lint

* Fixes from linter

Works on VMSS

* Replacing references to ethX with vlan veth

* Removed unnecessary log

* Removed unnecessary mac, fix tests

* Mockns method name enum

* Unable to use GetNetworkInterfaceByName due to NS

If I use GetNetworkInterface, I need to be in the vnet NS, but that means I will need to call ExecuteInNS, which causes tests to fail.

* Fixes from linter

* Assume if NS exists, vlan veth exists

Tests ok

* Fixes for Linter

* Snat refactor

* Fix delete tests

* Fix delete tests bug

* More snat refactor

* Breaking, prepping for Native Snat

Delete native endpoint snat route linux to remove errors and in theory, ovs should work fine again.

* Go mod tidy for linting

Hopefully this fixes the windows lint error

* Add fields to native endpoint client for snat

* Using New() func to create Native Client

Creation of the native endpoint client is too complicated to directly instantiate.

* Snat defaults

* Insert SNAT entry points

* Native Snat error handling

* Breaking, decouple ovsctl from snat

Proposed Solution implementation
Moved ovsctlClient.AddPortOnOVSBridge to ovs_endpoint_snatroute_linux.go. Removed ovsctlclient from NewSnatClient. Removed ovsctlClient from testing file.

* Delete unecessary ovssnat files

* No lint on vishvananda netns

Maybe this will fix the windows linter?

* Build linux only for netns package

Maybe this fixes the linter error?

* Remove nolint to see if linter fails

* Breaking, removed bridgeName

bridgeName refers to the OVS Switch I believe

* If native uses snat bridge, should also get IP

* Breaking, Decouple or Wrap snat route

* Check to see if snat triggered

* Snat behaviors specific to ovs/native

* Pass the pointer

Add/Delete ok

* Renaming to make consts public

* Breaking, moving ovs specific parts of snat to ovs

* Remove enable infra vnet (Tests ok)

Tested:
Allow Host to NC only
Allow NC to Host only
Allow both
Wget
Ping between containers

Warning: Enable snat is still hard coded to true!!!

* Move add port to after exists() check

* Moved netns interface to caller, generalized tests

Tests ok, Native ok

* Typos

* Reordered if statement, unwrapped arp

Tests ok, ping ok, wget ok

* Linted, wrapping errors

* Go fumpt entire network package

* Code markers removed, clean (Tests ok)

OVS & Native:
-	Ping between two containers same VM, no packets on bridge
-	Ping between two containers diff VM, no packets on bridge
-	Ping other container not in vnet, no packets on bridge
-	Ping snat to container, packets on bridge
-	Ping container to snat, packets on bridge
-	Tcpdump confirmed on azSnatBr
-	Deletion of containers deletes appropriate interfaces

* Renamed veth, fixed logs

* Made deleteEndpoints logic clearer, renamed error

* Renamed eth0 to primaryHostIfName, vlanEth to vlanIf

* Deleted debug log

* Corrected merge (hardware addr) (Tests ok)

* Renamed vlan veth to hostExtIf_vlanID, Disabled RA

eth0.2 makes disable RA look for a folder eth0 and then another sub folder "2". ("eth0/2") However, it should look for a folder named "eth0.2" literally. To solve this, we change the naming scheme to use an underscore instead. (Tests ok)

* Renamed Native to TransparentVlan

Confirmed basic functionality on VM with correct mode

* Make file updated

* Create azure-windows-multitenancy-transparent-vlan.conflist

* Unified snat err format

* Rename to transparent-vlan

* Route table support added to local netlink

* Moved SNAT to end of function

* Defer deleting vlan interface on failure
2022-08-10 13:50:26 -07:00
QxBytes d57e24ee25
feat: Add native linux endpoint client to prep removing OVS (#1471)
* Native Endpoint Client Add Endpoints

* AddEndpointRules, ConfigureContainerInterfacesAndRoutes

* Changed interface names, log statements

nw.extIf.Name > eth0 (eth0)
eth0.vlanid > eth0.X (eth0.1)
%s%s hostIfName > vnet (A1veth0)
%s%s-2 contIfName > container (B1veth0)

* Renaming, using lib to set ns

* Namespace "path" is /var/run/netns/<NS>

* Loopback set up, Remove auto kernel subnet route

* Cannot set link to up if it's in another NS

* Multiple containers on same VNET NS

* Delete Endpoint routes on Delete

* Minimizing netns usage

* Moving NS Exec Code

* Further minimized netns.Set usage

* Moved helper methods down, drafted tests

* Removed DevName from Route Info, more tests

* Test existing vnet ns, delete endpoint

* NetNS interface for testing

* Separated tests by namespace

* Endpoints delete if they cannot be moved into NS

* Namespace netns tests

* Added Native Client to deleteEndpointImpl

* Deletion of Endpoints Impl and Tests

* Cleaned code (Tests ok)

* Moved mock/netns to package (Tests ok)

* Fixing Netns (wip)

Moved netnsinterface to consumer package (network).
Removed "Netns" from "NewNetns" and "NewMockNetns" as it is unambiguous.
Changed uintptr to int and casted the int to uintptr when needed later.

* Using errors.Wrap for error context (wip)

* Removed sentence case (wip)

* Removing variable predeclaration

* Removed NewNativeEndpointClient

Directly instantiating struct because nothing special happens in NewNativeEndpointClient

* Removed generics from ExecuteInNS

* Removed uintptr from mocknetns, tests compile

Forgot to remove uintptr from mocknetns

* Fix tests, lint

* Fixes from linter

Works on VMSS

* Replacing references to ethX with vlan veth

* Removed unnecessary log

* Removed unnecessary mac, fix tests

* Mockns method name enum

* Unable to use GetNetworkInterfaceByName due to NS

If I use GetNetworkInterface, I need to be in the vnet NS, but that means I will need to call ExecuteInNS, which causes tests to fail.

* Fixes from linter

* Assume if NS exists, vlan veth exists

Tests ok

* Fixes for Linter

* Fix delete tests

* Fix delete tests bug

* Go mod tidy for linting

Hopefully this fixes the windows lint error

* No lint on vishvananda netns

Maybe this will fix the windows linter?

* Build linux only for netns package

Maybe this fixes the linter error?

* Remove nolint to see if linter fails

* Moved netns interface to caller, generalized tests

Tests ok, Native ok

* Typos

* Reordered if statement, unwrapped arp

Tests ok, ping ok, wget ok

* Renamed veth, fixed logs

* Made deleteEndpoints logic clearer, renamed error

* Renamed eth0 to primaryHostIfName, vlanEth to vlanIf
2022-08-02 14:54:10 -07:00
aegal 251edbfd04
Alegal/add timeout to hns calls (#1369)
* initial implemenation with timeout

* initial implemenation with timeout hns

* modify test

* modify code slightly

* updating to read in timeout flag and settings

* updating to read in timeout settings

* remove extra space

* correct a typo

* timeout value greater than zero for detection

* add couple ut's and remove needless code

* including timeout in hnsv1

* wip

* address comments

* address comments

* supress linter errors and update conflist

* fix linter and ensure we don't regress our tests

* updating with p.r feedback

* addressing comments

* updating linter warning

* update to address TM's comments

* fix lint error

* correct a linter spacing complaint

* remove fmt.sprintf
2022-05-25 14:18:46 -07:00
tamilmani1989 75e1239132
Remove duplicate logs (#1375)
* removed cni read config log

* removed duplicated and spam logs

* addressed comment

* commit

* reverting back to old permission

* revert files baxck to original state

* addressing hunter comments
2022-05-19 10:00:52 -07:00
Matthew Long 580c3e4072
feat: don't use CNS for CNI DEL command in windows multitenancy (#1216)
* feat: don't use CNS for CNI DEL command in windows multitenancy

* go fmt

* go fmt take 2

* fix: don't fallback to CNS for getNetwork or deleteHostNCApipaEndpoint, handle errNetworkNotFound

* test: add test for FindNetworkIDFromNetNs

* fix: getNetworkName needs to fallback to CNS when not found in state file for ADD

* fix: simplify the deleteHostNCApipaEndpoint function

* fix: linter

* fix: cnm should compile

* fix: always return retriable error for endpoint deletion failure

* fix: handle npe in cns/hnsclient by not using that package

* fix: logging

* fix: don't try cns if there is no multitenancy client

* fix: don't call CNS twice during ADD cmd

* fix: use hns wrapper, add some logging, don't return error when endpoint is already deleted
2022-02-03 19:14:31 -08:00
Mathew Merrick b09ca83ef7
[CNI] Add GET_ENDPOINT_STATE command to dump CNI state to stdout (#891)
* inital dump state and ipam interface update

* add reconcile command to CNI

* add integration test

* pass endpoint id on add

* address some feedback

* fix test path and linting

* address feedback and logging

* remove return and rename to PodEndpointID
2021-06-11 14:01:42 -07:00
aegal 79fd586dda
pass adapter name to hns create network call (#813)
* pass adapter name to hns create network call

* add comments and log
2021-03-08 11:28:20 -08:00
Mathew Merrick 41232c134d
CNI using CNS IPAM (#597)
* Configure CNI to use CNS IPAM
2020-09-29 14:43:19 -07:00
tamilmani1989 6ac5e8c9f0
CNI Ipv6 Dualstack Support (#538)
* added cniv6 plugin

* cni ipv6 base framework

* removed unwanted changes

* added ipv6 change

* added cni ipv6 changes

* drop neighbor discovery messages to other VMs

* fixed issues

* fixed unit tests

* fix nil dereference

* addressed comments

* ipv6 fixes and changes

* addressed comments
2020-04-15 22:30:48 -07:00
Vipul Hattiwale 19ac791afc Option to not enable hairpin on the host interface. (#472) 2020-01-16 14:27:25 -08:00
Ashvin Deodhar edd2ae7c8b
Support hyper-v and process based containers with cricontainerd (*COW) (#417)
Support hyper-v and process based containers with cricontainerd (*COW)
2019-10-18 06:58:27 -07:00
tamilmani1989 edabc6dd39
Added Host NC communication support in Linux (#374)
* allow inbound connection to container from host if the feature is enabled

* Allowinbound from host to NC if flag is enabled

* fixed old changes

* minor fixes

* added NC to host commn support

* added NCToHostCommunication field in cns contract

* addressed review comments

* addressed review comments

* addressed review comments

* address comments

* fixed space damage
2019-07-16 17:09:34 -07:00
tamilmani1989 18ebb287a4 Set dns domain on azure0 interface for ubuntu 18.0 and above(#350) 2019-05-02 15:51:40 -07:00
tamilmani1989 a75fbe77b3 Set dns server on azure bridge for ubuntu version >= 17 (#345)
* configure dns server on azure bridge for ubuntu versions > 18. Moved hns related apis from platform package to hsnclient package

* read dns server from interface instead of file and fixed few issues

* renturn error on fail to configure dns

* added unitest and fixed an issue in ReadFileByLines method

* added a UT

* addressed comments and added few tests to get code coverage

* confiure dns for ubuntu17 also

* corrected typo error of filename
2019-04-30 16:27:48 -07:00
Ashvin Deodhar 9b17569da2
Check for null ref before deleting Network (#331) 2019-04-12 10:11:37 -07:00
tamilmani1989 b7f6742b7f CNI to support transparent mode (#279)
* added changes in azure cni to support transparent mode

* cni for calico policy controller

* removed unused parameter

* minor fix

* addressed review comments

* addressed review comments

* modified vethname generation and the hostbveth prefix

* removed setting arp for default gw

* minor fix
2019-01-04 16:19:36 -08:00
Ashvin Deodhar bfb3eaafa7 Implement multitenancy for windows (#259)
* Implement multitenancy for windows
2018-10-31 14:34:04 -07:00
tamilmani1989 9a9c2cd8d4 Added support for InfraVnet connectivity in multitenancy CNI (#234)
* Added infravnet connectivity support for multitenancy CNI
2018-08-18 14:50:49 -07:00
tamilmani1989 147c4388c8 Multitenancy Support for Linux (#156)
This PR adds the following capabilities
1. Support to create and connect containers to different Azure Vnets. Every VlanId corresponds to a different Azure Vnet.
2. SNAT support for containers to reach Internet using the container's host IP as the SNAT address.

Both the above options are controlled by the config parameters in Azure CNI.
2018-07-06 11:45:47 -07:00
Yongli Chen 0bbce8daa9 Support k8s DNS & endpoint policy (#127)
* configure dnssuffix & dnsServerList

* add dns info to conflist

* change case for dns info

* remove hardcoding

* remove hardcoding

* parse k8s pod info

* add AdditionalArgs and Dns info to conflist

* serialize policies

* program route info

* start addressign ipam ip leak

* fix 1) ip inconsistency in k8s & pod. 2) IP leak in IPAM.

* remove comments

* separate windows & linux

* remove dnsServers

* remove comments

* address comments

* add dns verification

* abstract linux policy struct

* remove setPolicies
2018-05-03 14:57:31 -07:00
Onur Filiz b9a2193b3a Improve cleanup on network failure paths 2017-08-16 14:13:46 -07:00
Onur Filiz 3bbcd0fd26 Add support for multiple subnets and gateways per network 2017-03-10 13:53:37 -08:00
Onur Filiz 278ce7587b Added support for Linux l2tunnel mode 2017-03-06 16:24:20 -08:00
Onur Filiz 04cf50eabf Refactored interface IP configuration logic 2 2017-03-02 17:52:43 -08:00
Onur Filiz d2587fc338 Refactored interface IP configuration logic 2017-03-01 16:59:37 -08:00
Onur cac40ac0b3 Refactor network logic for Windows support 2017-02-10 16:15:53 -08:00
Onur Filiz c254bba269 Renamed Linux specific files 2017-02-10 15:11:46 -08:00
Onur Filiz 83617be124 Refactored ebtables to remove redundant code 2017-01-03 15:08:16 -08:00
Onur Filiz 0bf716e607 Exposed NetworkManager interface and made it more generic to support CNI 2016-11-22 12:31:48 -08:00
Onur Filiz a632028510 Improved logging for network and endpoint creation 2016-11-22 12:19:54 -08:00
Onur Filiz deb2a6d291 Updated package references with new repo name 2016-10-06 14:40:29 -07:00
Onur Filiz 82c725da46 Refactor core network logic to NetworkManager 2016-09-21 15:39:25 -07:00
Onur Filiz 5492e7279c Fixed code formatting, go fmt 2016-06-05 13:45:12 -07:00
Onur Filiz 03b5961b73 Integrated IPAM with network plugin (#15)
Integrated IPAM with network plugin
2016-06-02 19:02:07 -07:00
Onur Filiz d01751d9df Added errors returned by network plugin to API contract 2016-05-12 16:51:00 -07:00