diff options
Diffstat (limited to 'src/cni/ovsdpdk/ovsdpdk.patch')
-rw-r--r-- | src/cni/ovsdpdk/ovsdpdk.patch | 136 |
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) ++} |