61 lines
923 B
Go
61 lines
923 B
Go
package router
|
|
|
|
import (
|
|
"github.com/weaveworks/go-odp/odp"
|
|
)
|
|
|
|
// ODP admin functionality
|
|
|
|
func CreateDatapath(dpname string) error {
|
|
dpif, err := odp.NewDpif()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
defer dpif.Close()
|
|
|
|
_, err = dpif.CreateDatapath(dpname)
|
|
if err != nil && !odp.IsDatapathNameAlreadyExistsError(err) {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func DeleteDatapath(dpname string) error {
|
|
dpif, err := odp.NewDpif()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
defer dpif.Close()
|
|
|
|
dp, err := dpif.LookupDatapath(dpname)
|
|
if err != nil {
|
|
if odp.IsNoSuchDatapathError(err) {
|
|
return nil
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
return dp.Delete()
|
|
}
|
|
|
|
func AddDatapathInterface(dpname string, ifname string) error {
|
|
dpif, err := odp.NewDpif()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
defer dpif.Close()
|
|
|
|
dp, err := dpif.LookupDatapath(dpname)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = dp.CreateVport(odp.NewNetdevVportSpec(ifname))
|
|
return err
|
|
}
|