-
Notifications
You must be signed in to change notification settings - Fork 714
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7f5b69e
commit 29df3fa
Showing
249 changed files
with
34,985 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
bin/ | ||
cmd/dpvs-agent-server/dpvs-agent |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
MAKE = make | ||
SUBDIRS = cmd/dpvs-agent-server | ||
INSDIR = $(PWD)/bin | ||
export INSDIR | ||
|
||
OPENAPISPEC = dpvs-agent-api.yaml | ||
|
||
all: | ||
for i in $(SUBDIRS); do $(MAKE) -C $$i || exit 1; done | ||
|
||
clean: | ||
for i in $(SUBDIRS); do $(MAKE) -C $$i clean || exit 1; done | ||
|
||
install:all | ||
-mkdir -p $(INSDIR) | ||
for i in $(SUBDIRS); do $(MAKE) -C $$i install || exit 1; done | ||
|
||
uninstall: | ||
for i in $(SUBDIRS); do $(MAKE) -C $$i uninstall || exit 1; done | ||
|
||
openapi: $(OPENAPISPEC) | ||
ifeq ($(shell swagger version),) | ||
$(error "golang `swagger` command not found. You can install it with `go get github.com/go-swagger/go-swagger@v0.30.4`") | ||
endif | ||
swagger generate server -A dpvs-agent -f $< | ||
git checkout cmd/dpvs-agent-server/main.go | ||
|
||
license: | ||
ifeq ($(shell addlicense 2>&1|grep Usage),) | ||
$(error "`addlicense` command not found. You can install it with `go install github.com/google/addlicense`") | ||
endif | ||
@addlicense -check -c "IQiYi Inc." -l apache -ignore dpvs/** . || /bin/true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
#build | ||
``` | ||
swagger generate server -A dpvs-agent -f ./dpvs-agent-api.yaml | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package device | ||
|
||
import ( | ||
"github.com/dpvs-agent/pkg/ipc/pool" | ||
"github.com/dpvs-agent/pkg/ipc/types" | ||
|
||
apiDevice "github.com/dpvs-agent/restapi/operations/device" | ||
|
||
"github.com/go-openapi/runtime/middleware" | ||
"github.com/hashicorp/go-hclog" | ||
) | ||
|
||
type delDeviceAddr struct { | ||
connPool *pool.ConnPool | ||
logger hclog.Logger | ||
} | ||
|
||
func NewDelDeviceAddr(cp *pool.ConnPool, parentLogger hclog.Logger) *delDeviceAddr { | ||
logger := hclog.Default() | ||
if parentLogger != nil { | ||
logger = parentLogger.Named("DelDeviceAddr") | ||
} | ||
return &delDeviceAddr{connPool: cp, logger: logger} | ||
} | ||
|
||
// dpip addr add 192.168.88.16/32 dev dpdk0.102 | ||
func (h *delDeviceAddr) Handle(params apiDevice.DeleteDeviceNameAddrParams) middleware.Responder { | ||
addr := types.NewInetAddrDetail() | ||
addr.SetAddr(params.Spec.Addr) | ||
addr.SetIfName(params.Name) | ||
|
||
result := addr.Del(h.connPool, h.logger) | ||
switch result { | ||
case types.EDPVS_OK: | ||
h.logger.Info("Delete addr from device success.", "Device Name", params.Name, "Addr", params.Spec.Addr) | ||
return apiDevice.NewDeleteDeviceNameAddrOK() | ||
case types.EDPVS_NOTEXIST: | ||
h.logger.Warn("Delete a not exist addr from device done.", "Device Name", params.Name, "Addr", params.Spec.Addr, "result", result.String()) | ||
return apiDevice.NewDeleteDeviceNameAddrOK() | ||
default: | ||
h.logger.Error("Delete addr from device failed.", "Device Name", params.Name, "Addr", params.Spec.Addr, "result", result.String()) | ||
} | ||
|
||
return apiDevice.NewDeleteDeviceNameAddrInternalServerError() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package device | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/vishvananda/netlink" | ||
|
||
"github.com/dpvs-agent/pkg/ipc/pool" | ||
apiDevice "github.com/dpvs-agent/restapi/operations/device" | ||
|
||
"github.com/go-openapi/runtime/middleware" | ||
"github.com/hashicorp/go-hclog" | ||
) | ||
|
||
// ip link set xxx down | ||
type setDeviceNetlinkDown struct { | ||
connPool *pool.ConnPool | ||
logger hclog.Logger | ||
} | ||
|
||
func NewSetDeviceNetlinkDown(cp *pool.ConnPool, parentLogger hclog.Logger) *setDeviceNetlinkDown { | ||
logger := hclog.Default() | ||
if parentLogger != nil { | ||
logger = parentLogger.Named("SetDeviceNetlinkDown") | ||
} | ||
return &setDeviceNetlinkDown{connPool: cp, logger: logger} | ||
} | ||
|
||
func (h *setDeviceNetlinkDown) Handle(params apiDevice.DeleteDeviceNameNetlinkParams) middleware.Responder { | ||
cmd := fmt.Sprintf("ip link set %s down", params.Name) | ||
dev, err := netlink.LinkByName(params.Name) | ||
if err != nil { | ||
h.logger.Error("Get iface failed.", "Name", params.Name, "Error", err.Error()) | ||
return apiDevice.NewDeleteDeviceNameNetlinkInternalServerError() | ||
} | ||
|
||
if err := netlink.LinkSetDown(dev); err != nil { | ||
h.logger.Error("Set iface down failed.", "cmd", cmd, "Error", err.Error()) | ||
return apiDevice.NewDeleteDeviceNameNetlinkInternalServerError() | ||
} | ||
|
||
if err := netlink.LinkDel(dev); err != nil { | ||
h.logger.Error("Delete iface failed.", "Name", params.Name, "Error", err.Error()) | ||
return apiDevice.NewDeleteDeviceNameNetlinkInternalServerError() | ||
} | ||
|
||
h.logger.Info("Set down and remove iface success.", "cmd", cmd) | ||
return apiDevice.NewDeleteDeviceNameNetlinkOK() | ||
} |
68 changes: 68 additions & 0 deletions
68
tools/dpvs-agent/cmd/device/delete_device_name_netlink_addr.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
package device | ||
|
||
import ( | ||
"fmt" | ||
"net" | ||
"strings" | ||
|
||
"github.com/vishvananda/netlink" | ||
|
||
"github.com/dpvs-agent/pkg/ipc/pool" | ||
apiDevice "github.com/dpvs-agent/restapi/operations/device" | ||
|
||
"github.com/go-openapi/runtime/middleware" | ||
"github.com/hashicorp/go-hclog" | ||
) | ||
|
||
type delDeviceNetlinkAddr struct { | ||
connPool *pool.ConnPool | ||
logger hclog.Logger | ||
} | ||
|
||
func NewDelDeviceNetlinkAddr(cp *pool.ConnPool, parentLogger hclog.Logger) *delDeviceNetlinkAddr { | ||
logger := hclog.Default() | ||
if parentLogger != nil { | ||
logger = parentLogger.Named("DelDeviceNetlinkAddr") | ||
} | ||
return &delDeviceNetlinkAddr{connPool: cp, logger: logger} | ||
} | ||
|
||
func (h *delDeviceNetlinkAddr) Handle(params apiDevice.DeleteDeviceNameNetlinkAddrParams) middleware.Responder { | ||
var cidr string | ||
if strings.Count(params.Spec.Addr, "/") == 0 { | ||
ip := net.ParseIP(params.Spec.Addr) | ||
if ip == nil { | ||
return apiDevice.NewDeleteDeviceNameNetlinkAddrInternalServerError() | ||
} | ||
|
||
if ip.To4() != nil { | ||
cidr = params.Spec.Addr + "/32" | ||
} else { | ||
cidr = params.Spec.Addr + "/128" | ||
} | ||
} | ||
|
||
ip, ipnet, err := net.ParseCIDR(cidr) | ||
if err != nil { | ||
return apiDevice.NewDeleteDeviceNameNetlinkAddrInternalServerError() | ||
} | ||
|
||
cmd := fmt.Sprintf("ip addr del %s dev %s", cidr, params.Name) | ||
|
||
ipnet.IP = ip | ||
addr := &netlink.Addr{IPNet: ipnet} | ||
|
||
link, err := netlink.LinkByName(params.Name) | ||
if err != nil { | ||
h.logger.Error("Get linux network device by name failed.", "device Name", params.Name, "Error", err.Error()) | ||
return apiDevice.NewDeleteDeviceNameNetlinkAddrInternalServerError() | ||
} | ||
|
||
if err := netlink.AddrDel(link, addr); err != nil { | ||
h.logger.Error("linux network operation failed.", "cmd", cmd, "Error", err.Error()) | ||
return apiDevice.NewDeleteDeviceNameNetlinkAddrInternalServerError() | ||
} | ||
|
||
h.logger.Info("linux network operation success.", "cmd", cmd) | ||
return apiDevice.NewDeleteDeviceNameNetlinkAddrOK() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package device | ||
|
||
import ( | ||
"github.com/dpvs-agent/pkg/ipc/pool" | ||
"github.com/dpvs-agent/pkg/ipc/types" | ||
|
||
apiDevice "github.com/dpvs-agent/restapi/operations/device" | ||
|
||
"github.com/go-openapi/runtime/middleware" | ||
"github.com/hashicorp/go-hclog" | ||
) | ||
|
||
type delDeviceRoute struct { | ||
connPool *pool.ConnPool | ||
logger hclog.Logger | ||
} | ||
|
||
func NewDelDeviceRoute(cp *pool.ConnPool, parentLogger hclog.Logger) *delDeviceRoute { | ||
logger := hclog.Default() | ||
if parentLogger != nil { | ||
logger = parentLogger.Named("DelDeviceRoute") | ||
} | ||
return &delDeviceRoute{connPool: cp, logger: logger} | ||
} | ||
|
||
// dpip del route 192.168.88.16/32 dev dpdk0.102 | ||
func (h *delDeviceRoute) Handle(params apiDevice.DeleteDeviceNameRouteParams) middleware.Responder { | ||
|
||
// dest [addr], [mask] and [dev name] is useful of delete route only | ||
route := types.NewRouteDetail() | ||
route.SetDevice(params.Name) | ||
if params.Spec == nil { | ||
// FIXME: front error | ||
return apiDevice.NewDeleteDeviceNameRouteInternalServerError() | ||
} | ||
|
||
route.SetDst(params.Spec.Dst) | ||
route.SetScope(params.Spec.Scope) | ||
/* | ||
route.SetSrc(params.Spec.Src) | ||
route.SetGateway(params.Spec.Gateway) | ||
route.SetScope(params.Spec.Scope) | ||
route.SetMtu(params.Spec.Mtu) | ||
route.SetMetric(params.Spec.Metric) | ||
*/ | ||
result := route.Del(h.connPool, h.logger) | ||
switch result { | ||
case types.EDPVS_OK: | ||
h.logger.Info("Delete route success.", "Device Name", params.Name, "route Dst", params.Spec.Dst) | ||
return apiDevice.NewDeleteDeviceNameRouteOK() | ||
case types.EDPVS_NOTEXIST: | ||
h.logger.Warn("Delete not exist route done.", "Device Name", params.Name, "route Dst", params.Spec.Dst, "result", result.String()) | ||
return apiDevice.NewDeleteDeviceNameRouteOK() | ||
default: | ||
h.logger.Error("Delete route failed.", "Device Name", params.Name, "route Dst", params.Spec.Dst, "result", result.String()) | ||
} | ||
|
||
return apiDevice.NewDeleteDeviceNameRouteInternalServerError() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
package device | ||
|
||
import ( | ||
// "github.com/dpvs-agent/models" | ||
"github.com/dpvs-agent/pkg/ipc/pool" | ||
"github.com/dpvs-agent/pkg/ipc/types" | ||
|
||
apiDevice "github.com/dpvs-agent/restapi/operations/device" | ||
|
||
"github.com/go-openapi/runtime/middleware" | ||
"github.com/hashicorp/go-hclog" | ||
) | ||
|
||
type delDeviceVlan struct { | ||
connPool *pool.ConnPool | ||
logger hclog.Logger | ||
} | ||
|
||
func NewDelDeviceVlan(cp *pool.ConnPool, parentLogger hclog.Logger) *delDeviceVlan { | ||
logger := hclog.Default() | ||
if parentLogger != nil { | ||
logger = parentLogger.Named("DelDeviceVlan") | ||
} | ||
return &delDeviceVlan{connPool: cp, logger: logger} | ||
} | ||
|
||
// dpip vlan del dpdk0.102 | ||
func (h *delDeviceVlan) Handle(params apiDevice.DeleteDeviceNameVlanParams) middleware.Responder { | ||
// vlan device delete is need device name only | ||
vlan := types.NewVlanDevice() | ||
vlan.SetIfName(params.Name) | ||
|
||
result := vlan.Del(h.connPool, h.logger) | ||
switch result { | ||
case types.EDPVS_OK: | ||
h.logger.Info("Delete dpvs vlan success.", "Vlan Name", params.Name) | ||
return apiDevice.NewDeleteDeviceNameVlanOK() | ||
case types.EDPVS_NOTEXIST: | ||
h.logger.Warn("Delete dpvs vlan done.", "Vlan Name", params.Name, "result", result.String()) | ||
return apiDevice.NewDeleteDeviceNameVlanOK() | ||
default: | ||
h.logger.Error("Delete dpvs vlan failed.", "Vlan Name", params.Name, "result", result.String()) | ||
} | ||
|
||
return apiDevice.NewDeleteDeviceNameVlanInternalServerError() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
package device | ||
|
||
import ( | ||
"strings" | ||
|
||
"github.com/dpvs-agent/models" | ||
"github.com/dpvs-agent/pkg/ipc/pool" | ||
"github.com/dpvs-agent/pkg/ipc/types" | ||
|
||
apiDevice "github.com/dpvs-agent/restapi/operations/device" | ||
|
||
"github.com/go-openapi/runtime/middleware" | ||
"github.com/hashicorp/go-hclog" | ||
) | ||
|
||
type getDeviceNameNic struct { | ||
connPool *pool.ConnPool | ||
logger hclog.Logger | ||
} | ||
|
||
func NewGetDeviceNameNic(cp *pool.ConnPool, parentLogger hclog.Logger) *getDeviceNameNic { | ||
logger := hclog.Default() | ||
if parentLogger != nil { | ||
logger = parentLogger.Named("GetDeviceNameNic") | ||
} | ||
return &getDeviceNameNic{connPool: cp, logger: logger} | ||
} | ||
|
||
// dpip link show xxx | ||
func (h *getDeviceNameNic) Handle(params apiDevice.GetDeviceNameNicParams) middleware.Responder { | ||
name := make([]byte, 0x10) | ||
copy(name[:], params.Name[:]) | ||
|
||
desc := types.NewNetifNicDesc() | ||
list, err := desc.GetPortList(h.connPool, h.logger) | ||
if err != types.EDPVS_OK { | ||
h.logger.Info("Get netif ports failed.", "Error", err.String()) | ||
return apiDevice.NewGetDeviceNameNicInternalServerError() | ||
} | ||
|
||
h.logger.Info("Get netif port success.", "port list", list) | ||
exist := false | ||
specModels := new(models.NicDeviceSpecList) | ||
specModels.Items = make([]*models.NicDeviceSpec, len(list.Entries)) | ||
|
||
for i, entry := range list.Entries { | ||
specModels.Items[i] = new(models.NicDeviceSpec) | ||
if strings.EqualFold(strings.ToLower(string(name)), strings.ToLower(entry.GetName())) { | ||
exist = true | ||
} | ||
|
||
portName := entry.GetName() | ||
desc.SetName(portName) | ||
detail, err := desc.GetPortBasic(h.connPool, h.logger) | ||
if err != types.EDPVS_OK { | ||
h.logger.Error("Get netif port base info failed.", "portName", portName, "Error", err.String()) | ||
return apiDevice.NewGetDeviceNameNicInternalServerError() | ||
} | ||
h.logger.Info("Get netif port base info success.", "portName", portName, "port detail", detail) | ||
|
||
stats, err := desc.GetPortStats(h.connPool, h.logger) | ||
if err != types.EDPVS_OK { | ||
h.logger.Error("Get netif port stats info failed.", "portName", portName, "Error", err.String()) | ||
return apiDevice.NewGetDeviceNameNicInternalServerError() | ||
} | ||
h.logger.Info("Get netif port stats info success.", "portName", portName, "port stats", stats) | ||
|
||
specModels.Items[i].Detail = detail.GetModel() | ||
specModels.Items[i].Stats = stats.GetModel() | ||
} | ||
|
||
if exist { | ||
if *params.Stats { | ||
} | ||
} | ||
|
||
return apiDevice.NewGetDeviceNameNicOK().WithPayload(specModels) | ||
} |
Oops, something went wrong.