This package provides the Golang interface for accessing Windows HCN APIs to manage entities within the Host Network Service (HNS), which serves as the server container networking component in Windows. While it is mainly utilized by the Windows KubeProxy component in Kubernetes, it is also available for use in other projects, such as Azure CNI, Windows CNI, Calico CNI, Flannel CNI, Azure NPM, and more.
This project is imported by KubeProxy, Kubelet etc. for building binaries.
This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit Microsoft CLA.
When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.
We require that contributors sign their commits to certify they either authored the work themselves or otherwise have permission to use it in this project.
We also require that contributors sign their commits using using git commit --signoff
to certify they either authored the work themselves or otherwise have permission to use it in this project.
A range of commits can be signed off using git rebase --signoff
.
Please see the developer certificate for more info, as well as to make sure that you can attest to the rules listed. Our CI uses the DCO Github app to ensure that all commits in a given PR are signed-off.
Code must pass a linting stage, which uses golangci-lint
.
Since ./test
is a separate Go module, the linter is run from both the root and the
test
directories. Additionally, the linter is run with GOOS
set to both windows
and
linux
.
The linting settings are stored in .golangci.yaml
, and can be run
automatically with VSCode by adding the following to your workspace or folder settings:
"go.lintTool": "golangci-lint",
"go.lintOnSave": "package",
Additional editor integrations options are also available.
Alternatively, golangci-lint
can be installed and run locally:
# use . or specify a path to only lint a package
# to show all lint errors, use flags "--max-issues-per-linter=0 --max-same-issues=0"
> golangci-lint run
To run across the entire repo for both GOOS=windows
and linux
:
> foreach ( $goos in ('windows', 'linux') ) {
foreach ( $repo in ('.', 'test') ) {
pwsh -Command "cd $repo && go env -w GOOS=$goos && golangci-lint.exe run --verbose"
}
}
The pipeline checks that auto-generated code, via go generate
, are up to date.
Similar to the linting stage, go generate
is run in root Go modules.
This can be done via:
> go generate ./...
> cd test && go generate ./...
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
This project requires Golang 1.22 or newer to build.
For system requirements to run this project, see the Microsoft docs on Windows Container requirements.
Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) at secure@microsoft.com. You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Further information, including the MSRC PGP key, can be found in the Security TechCenter.
For additional details, see Report a Computer Security Vulnerability on Technet
Copyright (c) 2018 Microsoft Corp. All rights reserved.