{"id":37126846,"url":"https://github.com/foundation-model-stack/multi-nic-cni","last_synced_at":"2026-01-14T14:42:25.534Z","repository":{"id":41745488,"uuid":"493683590","full_name":"foundation-model-stack/multi-nic-cni","owner":"foundation-model-stack","description":null,"archived":false,"fork":false,"pushed_at":"2025-12-16T06:11:55.000Z","size":31302,"stargazers_count":40,"open_issues_count":8,"forks_count":8,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-12-19T17:40:58.605Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://foundation-model-stack.github.io/multi-nic-cni/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/foundation-model-stack.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code-of-conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":"MAINTAINERS.md","copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-05-18T13:50:59.000Z","updated_at":"2025-12-16T06:11:52.000Z","dependencies_parsed_at":"2023-02-14T04:02:13.847Z","dependency_job_id":"c3a15a0e-3660-4cf6-aba4-604370012ab8","html_url":"https://github.com/foundation-model-stack/multi-nic-cni","commit_stats":{"total_commits":196,"total_committers":6,"mean_commits":"32.666666666666664","dds":0.04591836734693877,"last_synced_commit":"fda977c9a8f6aa9468717f50393aca03471b57a1"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/foundation-model-stack/multi-nic-cni","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foundation-model-stack%2Fmulti-nic-cni","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foundation-model-stack%2Fmulti-nic-cni/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foundation-model-stack%2Fmulti-nic-cni/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foundation-model-stack%2Fmulti-nic-cni/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/foundation-model-stack","download_url":"https://codeload.github.com/foundation-model-stack/multi-nic-cni/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foundation-model-stack%2Fmulti-nic-cni/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28423972,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T13:30:50.153Z","status":"ssl_error","status_checked_at":"2026-01-14T13:29:08.907Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-14T14:42:24.774Z","updated_at":"2026-01-14T14:42:25.529Z","avatar_url":"https://github.com/foundation-model-stack.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e [!IMPORTANT]\n\u003e\n\u003e ⚠️ Repository Status\n\u003e\n\u003e This repository is currently **suspended for updates** due to resource constraints. \n\u003e **Further development and maintenance are on hold as of the latest release (v1.3.1)**.\n\u003e\n\u003e We appreciate your understanding and will provide updates if the status changes.\n\n## **official document:** https://foundation-model-stack.github.io/multi-nic-cni\n\n- [Multi-NIC CNI](#multi-nic-cni)\n  - [MultiNicNetwork](#multinicnetwork)\n  - [Usage](#usage)\n    - [Installation](#installation)\n      - [Requirements](#requirements)\n      - [Quick Installation](#quick-installation)\n      - [Deploy MultiNicNetwork resource](#deploy-multinicnetwork-resource)\n    - [Test](#test)\n- [Demo](#demo)\n- [Blog Posts, Talks, and Papers](#blog-posts-talks-and-papers)\n\n# Multi-NIC CNI\n\nMulti-NIC CNI is the CNI plugin for secondary networks operating on top of [Multus CNI](https://github.com/k8snetworkplumbingwg/multus-cni). This CNI offers several key features, outlined below, to help cluster administrators and users simplify the process of enabling high-performance networking.\n\n- I) **Unifying user-managed network definition**: User can manage only one network definition for multiple secondary interfaces with a common CNI main plugin such as ipvlan, macvlan, and sr-iov.The Multi-NIC CNI automatically discovers all available secondary interfaces and handles them as a NIC pool.\n\n  ![](./document/docs/img/multi-nic-cni-feature-1.png)\n\n  With this manner, it can provide the following benefits.\n\n  - **Common NAT-bypassing network solution**: All secondary NICs on each host can be assigned with non-conflict CIDR and non-conflict L3 routing configuration that can omit an overlay networking overhead. Particularyly, the CNI is built-in with L3 IPVLAN solution composing of the following functionalities.\n    1) **Interface-host-devision CIDR Computation**: compute allocating CIDR range for each host and each interface from a single global subnet with the number of bits for hosts and for interface. \n    2) **L3 Host Route Configuration**: configure L3 routes (next hop via dev) in host route table according to the computed CIDR.\n    3) **Distributed IP Allocation Management**: manage IP allocation/deallocation distributedly via the communication between CNI program and daemon at each host.\n\n    [read more](./document/docs/Concept/multi-nic-ipam.md) \n\n  - **Policy-based secondary network attachment**: Instead of statically set the desired host's master interface name one by one, user can define a policy on attaching multiple secondary network interfaces such as specifying only the number of desired interfaces, filtering only highspeed NICs. \n\n    [read more](./document/docs/Concept/policy.md)\n\n-  II) **Bridging device plugin runtime results and CNI configuration:** Multi-NIC CNI can configure CNI of network device in accordance to device plugin allocation results orderly.\n\n   ![](./document/docs/img/multi-nic-cni-feature-2.png)\n\n- III) **Building-in with several auto-configured CNIs**\nLeveraging advantage point of managing multiple CNIs together with auto-discovery and dynamic interface selection, we built several auto-configured CNIs in the Multi-NIC CNI project.\n\n  \u003cimg src=\"./document/docs/img/multi-nic-cni-feature-3.png\" alt=\"drawing\" style=\"width:600px;\"/\u003e\n\nThe Multi-NIC CNI architecture can be found [here](./document/docs/contributing/architecture.md).\n\n## MultiNicNetwork\nThe Multi-NIC operator operates over a custom resource named *MultiNicNetwork* defined by users.\nThis definition will define a Pod global subnet, common network definition (main CNI and IPAM plugin), and attachment policy. \nAfter deploying *MultiNicNetwork*, *NetworkAttachmentDefinition* with the same name will be automatically configured and created respectively.\n\n```yaml\n# network.yaml\napiVersion: multinic.fms.io/v1\nkind: MultiNicNetwork\nmetadata:\n  name: multi-nic-sample\nspec:\n  subnet: \"192.168.0.0/16\"\n  ipam: |\n    {\n      \"type\": \"multi-nic-ipam\",\n      \"hostBlock\": 6, \n      \"interfaceBlock\": 2,\n      \"vlanMode\": \"l3\"\n    }\n  multiNICIPAM: true\n  plugin:\n    cniVersion: \"0.3.0\"\n    type: ipvlan\n    args: \n      mode: l3\n  attachPolicy:\n    strategy: none\n```\n\nArgument|Description|Value|Remarks\n---|---|---|---\nsubnet|cluster-wide subnet for all hosts and pods|CIDR range|currently support only v4\nhostBlock|number of address bits for host indexing| int (n) | the number of assignable host = 2^n\nipam|ipam plugin config| string | ipam can be single-NIC IPAM (e.g., whereabouts, VPC-native IPAM) or multi-NIC IPAM (e.g., [Multi-NIC IPAM Plugin](./document/docs/Concept/multi-nic-ipam.md#ipam-configuration))\nmultiNicIPAM| indicator of ipam type | bool | **true** if ipam returns multiple IPs from *masters* key of NetworkAttachmentDefinition config at once, **false** if ipam returns only single IP from static config in ipam block\nplugin|main plugin config|[NetConf](https://pkg.go.dev/github.com/containernetworking/cni/pkg/types#NetConf) + plugin-specific arguments | main plugin integration must implement [Plugin](./plugin/plugin.go) with GetConfig function\nattachPolicy|attachment policy|policy|[strategy](./document/docs/Concept/policy.md) with corresponding arguments to select host NICs to be master of secondary interfaces on Pod\nnamespaces| (optional) limit network definition application to list of namespaces (i.e., to create NetworkAttachmentDefinition resource)|[]string|if not specified, network definitions will be applied to all namespaces. new item can be added to the list by `kubectl edit` to create new NetworkAttachmentDefinition. the created NetworkAttachmentDefinition must be deleted manually if needed.\n\n\n## Usage\n\n### Installation\nFor full installation guide, please check https://foundation-model-stack.github.io/multi-nic-cni/user_guide/.\n\n#### Requirements\n- **Secondary interfaces** attached to worker nodes, check terraform script [here](https://github.com/foundation-model-stack/multi-nic-cni/tree/main/terraform).\n    * Secondary interfaces must have an **IPv4** address assigned.\n- Multus CNI installation; compatible with networkAttachmentDefinition and pod annotation in **multus-cni v3.8**\n- For IPVLAN L3 CNI, the following configurations are additionally required\n    * enable allowing **IP spoofing** for each attached interface\n    * set **security group** to allow IPs in the target container subnet\n    * **IPVLAN support (kernel version \u003e= 4.2)**\n\n\n#### Quick Installation\n\n- Openshift Container Platform:\n  - Search for `multi-nic-cni-operator` in OperatorHub\n\n    ![](./document/docs/img/openshift-operatorhub.png)\n\n![](./document/docs/img/specify-ns.png)\n\n#### Deploy MultiNicNetwork resource\n1. Prepare `network.yaml` as shown in the [example](#multinicnetwork)\n    \n2. Deploy \n   ```bash\n   kubectl apply -f network.yaml\n   ```\n   After deployment, the operator will create *NetworkAttachmentDefinition* of [Multus CNI](https://github.com/k8snetworkplumbingwg/multus-cni) from *MultiNicNetwork* as well as dependent resource such as *SriovNetworkNodePolicy*, *SriovNetwork* for sriov plugin.\n3. To attach additional interfaces, annotate the pod with the network name\n    ```yaml\n    metadata:\n      annotations:\n        k8s.v1.cni.cncf.io/networks: multi-nic-sample\n    ```\n\n### Test\nFor full user guide and testing , please check https://foundation-model-stack.github.io/multi-nic-cni/user_guide/user.\n\n#### Check simple client-server connection\n\n1. Set target peer\n   \n    ```bash\n    export SERVER_HOST_NAME=\u003ctarget-server-node-name\u003e\n    export CLIENT_HOST_NAME=\u003ctarget-client-node-name\u003e\n    ```\n    \n    \u003e If the target peer is not set, the last two of listed nodes will be selected as server and client, respectively.\n\n2. Run the test\n    ```bash\n    make sample-concheck\n    ```\n    Example output:\n    \n    ```python\n    # pod/multi-nic-iperf3-server created\n    # pod/multi-nic-iperf3-server condition met\n    # pod/multi-nic-iperf3-client created\n    # pod/multi-nic-iperf3-client condition met\n    # [  5] local 192.168.0.66 port 46284 connected to 192.168.0.130 port 5201\n    # [ ID] Interval           Transfer     Bitrate         Retr  Cwnd\n    # [  5]   0.00-1.00   sec   121 MBytes  1.02 Gbits/sec    0   3.04 MBytes\n    # [  5]   1.00-2.00   sec   114 MBytes   954 Mbits/sec    0   3.04 MBytes\n    # [  5]   2.00-3.00   sec   115 MBytes   964 Mbits/sec   45   2.19 MBytes\n    # [  5]   3.00-4.00   sec   114 MBytes   954 Mbits/sec   45   1.67 MBytes\n    # [  5]   4.00-5.00   sec   114 MBytes   954 Mbits/sec    0   1.77 MBytes\n    # - - - - - - - - - - - - - - - - - - - - - - - - -\n    # [ ID] Interval           Transfer     Bitrate         Retr\n    # [  5]   0.00-5.00   sec   577 MBytes   969 Mbits/sec   90             sender\n    # [  5]   0.00-5.04   sec   574 MBytes   956 Mbits/sec                  receiver\n\n    # iperf Done.\n    # pod \"multi-nic-iperf3-client\" deleted\n    # pod \"multi-nic-iperf3-server\" deleted\n    ```\n\n- If pod is failed to start, check [this troubleshooting guide](https://foundation-model-stack.github.io/multi-nic-cni/troubleshooting/troubleshooting/#pod-failed-to-start).\n- If pod is failed to communicate, check [this troubleshooting guide](https://foundation-model-stack.github.io/multi-nic-cni/troubleshooting/troubleshooting/#tcpudp-communication-failed).\n\n# Demo\n\nhttps://github.com/user-attachments/assets/129239b9-37f0-4669-b2ec-d93c4ce16c84\n\n# Blog Posts, Talks, and Papers\nDiscover more insights about Multi-NIC CNI through our blog posts, talks, and academic papers.\n\n- Medium Blog Post Series: https://medium.com/@sunyanan.choochotkaew1/list/multinic-cni-series-8570830e6f3f\n- KubeCon+CloudNativeCon NA 2022 CNCF-Hosted Co-located Event: https://sched.co/1AsSs\n- KubeCon+CloudNativeCon NA 2024 CNCF-Hosted Co-located Event: https://sched.co/1izs8\n- Multi-NIC CNI in Vela IBM Research's AI supercomputer in the cloud: https://research.ibm.com/blog/openshift-foundation-model-stack\n- Paper - The infrastructure powering IBM's Gen AI model development: https://arxiv.org/abs/2407.05467","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoundation-model-stack%2Fmulti-nic-cni","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffoundation-model-stack%2Fmulti-nic-cni","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoundation-model-stack%2Fmulti-nic-cni/lists"}