summaryrefslogtreecommitdiffstats
path: root/src/cni/ovsdpdk/ovsdpdk.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/cni/ovsdpdk/ovsdpdk.patch')
-rw-r--r--src/cni/ovsdpdk/ovsdpdk.patch136
1 files changed, 136 insertions, 0 deletions
diff --git a/src/cni/ovsdpdk/ovsdpdk.patch b/src/cni/ovsdpdk/ovsdpdk.patch
new file mode 100644
index 0000000..67b3703
--- /dev/null
+++ b/src/cni/ovsdpdk/ovsdpdk.patch
@@ -0,0 +1,136 @@
+diff --git a/build.sh b/build.sh
+index cd21ba8..bc60d91 100755
+--- a/build.sh
++++ b/build.sh
+@@ -19,7 +19,7 @@ export GOPATH=${PWD}/gopath
+ mkdir -p "${PWD}/bin"
+
+ echo "Building plugins"
+-PLUGINS="plugins/meta/* plugins/main/* plugins/ipam/* plugins/sample"
++PLUGINS="plugins/main/ovsdpdk plugins/main/bridge plugins/ipam/host-local"
+ for d in $PLUGINS; do
+ if [ -d "$d" ]; then
+ plugin="$(basename "$d")"
+diff --git a/plugins/main/ovsdpdk/ovsdpdk.go b/plugins/main/ovsdpdk/ovsdpdk.go
+new file mode 100644
+index 0000000..1b931d4
+--- /dev/null
++++ b/plugins/main/ovsdpdk/ovsdpdk.go
+@@ -0,0 +1,117 @@
++// Copyright 2014 CNI authors
++//
++// Licensed under the Apache License, Version 2.0 (the "License");
++// you may not use this file except in compliance with the License.
++// You may obtain a copy of the License at
++//
++// http://www.apache.org/licenses/LICENSE-2.0
++//
++// Unless required by applicable law or agreed to in writing, software
++// distributed under the License is distributed on an "AS IS" BASIS,
++// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++// See the License for the specific language governing permissions and
++// limitations under the License.
++
++package main
++
++import (
++ "encoding/json"
++ "errors"
++ "fmt"
++ //"net"
++ "runtime"
++ //"syscall"
++ "os/exec"
++ //"io/ioutil"
++
++ "github.com/containernetworking/cni/pkg/skel"
++ "github.com/containernetworking/cni/pkg/types"
++ "github.com/containernetworking/cni/pkg/types/current"
++ "github.com/containernetworking/cni/pkg/version"
++ //"github.com/containernetworking/plugins/pkg/ip"
++ "github.com/containernetworking/plugins/pkg/ipam"
++ //"github.com/containernetworking/plugins/pkg/ns"
++ //"github.com/containernetworking/plugins/pkg/utils"
++ //"github.com/vishvananda/netlink"
++)
++
++const defaultBrName = "cni0"
++
++type NetConf struct {
++ types.NetConf
++ BrName string `json:"bridge"`
++}
++
++func init() {
++ // this ensures that main runs only on main thread (thread group leader).
++ // since namespace ops (unshare, setns) are done for a single thread, we
++ // must ensure that the goroutine does not jump from OS thread to thread
++ runtime.LockOSThread()
++}
++
++func loadNetConf(bytes []byte) (*NetConf, string, error) {
++ n := &NetConf{
++ BrName: defaultBrName,
++ }
++ if err := json.Unmarshal(bytes, n); err != nil {
++ return nil, "", fmt.Errorf("failed to load netconf: %v", err)
++ }
++ return n, n.CNIVersion, nil
++}
++
++func setupVhostUser(args *skel.CmdArgs, types string) error {
++ exec.Command("/bin/bash", "/opt/cni/bin/setup_ovsdpdk.sh", args.Netns, args.ContainerID, types).Output()
++ return nil
++}
++
++
++func cmdAdd(args *skel.CmdArgs) error {
++ n, cniVersion, err := loadNetConf(args.StdinData)
++ if err != nil {
++ return err
++ }
++
++ // run the IPAM plugin and get back the config to apply
++ r, err := ipam.ExecAdd(n.IPAM.Type, args.StdinData)
++ if err != nil {
++ return err
++ }
++
++ // Convert whatever the IPAM result was into the current Result type
++ result, err := current.NewResultFromResult(r)
++ if err != nil {
++ return err
++ }
++
++ if len(result.IPs) == 0 {
++ return errors.New("IPAM plugin returned missing IP config")
++ }
++
++ setupVhostUser(args, result.String())
++
++ return types.PrintResult(result, cniVersion)
++}
++
++func tearDownVhostUser(args *skel.CmdArgs) error {
++ exec.Command("/bin/bash", "/opt/cni/bin/teardown_ovsdpdk.sh", args.Netns, args.ContainerID).Output()
++ return nil
++}
++
++func cmdDel(args *skel.CmdArgs) error {
++ n, _, err := loadNetConf(args.StdinData)
++ if err != nil {
++ return err
++ }
++
++ if err := ipam.ExecDel(n.IPAM.Type, args.StdinData); err != nil {
++ return err
++ }
++
++ tearDownVhostUser(args)
++ return err
++
++}
++
++func main() {
++ skel.PluginMain(cmdAdd, cmdDel, version.All)
++}