Skip to content
Permalink
Browse files

Expose network interfaces via runc events

The libcontainer network statistics are unreachable without manually
creating a libcontainer instance. To retrieve them via the CLI interface
of runc, we now expose them as well.

Signed-off-by: Sascha Grunert <sgrunert@suse.com>
  • Loading branch information
saschagrunert committed Dec 5, 2019
1 parent c35c2c9 commit 41a20b5852d2cc7aa75de452e5a59a9d321e318d
Showing with 31 additions and 26 deletions.
  1. +1 −0 events.go
  2. +3 −2 libcontainer/network_linux.go
  3. +0 −15 libcontainer/stats.go
  4. +6 −3 libcontainer/stats_linux.go
  5. +21 −6 types/events.go
@@ -163,6 +163,7 @@ func convertLibcontainerStats(ls *libcontainer.Stats) *types.Stats {
}
}

s.NetworkInterfaces = ls.Interfaces
return &s
}

@@ -10,6 +10,7 @@ import (
"strings"

"github.com/opencontainers/runc/libcontainer/configs"
"github.com/opencontainers/runc/types"
"github.com/vishvananda/netlink"
)

@@ -37,8 +38,8 @@ func getStrategy(tpe string) (networkStrategy, error) {
}

// Returns the network statistics for the network interfaces represented by the NetworkRuntimeInfo.
func getNetworkInterfaceStats(interfaceName string) (*NetworkInterface, error) {
out := &NetworkInterface{Name: interfaceName}
func getNetworkInterfaceStats(interfaceName string) (*types.NetworkInterface, error) {
out := &types.NetworkInterface{Name: interfaceName}
// This can happen if the network runtime information is missing - possible if the
// container was created by an old version of libcontainer.
if interfaceName == "" {

This file was deleted.

@@ -1,10 +1,13 @@
package libcontainer

import "github.com/opencontainers/runc/libcontainer/cgroups"
import "github.com/opencontainers/runc/libcontainer/intelrdt"
import (
"github.com/opencontainers/runc/libcontainer/cgroups"
"github.com/opencontainers/runc/libcontainer/intelrdt"
"github.com/opencontainers/runc/types"
)

type Stats struct {
Interfaces []*NetworkInterface
Interfaces []*types.NetworkInterface
CgroupStats *cgroups.Stats
IntelRdtStats *intelrdt.Stats
}
@@ -9,12 +9,13 @@ type Event struct {

// stats is the runc specific stats structure for stability when encoding and decoding stats.
type Stats struct {
CPU Cpu `json:"cpu"`
Memory Memory `json:"memory"`
Pids Pids `json:"pids"`
Blkio Blkio `json:"blkio"`
Hugetlb map[string]Hugetlb `json:"hugetlb"`
IntelRdt IntelRdt `json:"intel_rdt"`
CPU Cpu `json:"cpu"`
Memory Memory `json:"memory"`
Pids Pids `json:"pids"`
Blkio Blkio `json:"blkio"`
Hugetlb map[string]Hugetlb `json:"hugetlb"`
IntelRdt IntelRdt `json:"intel_rdt"`
NetworkInterfaces []*NetworkInterface `json:"network_interfaces"`
}

type Hugetlb struct {
@@ -113,3 +114,17 @@ type IntelRdt struct {
// The memory bandwidth schema in 'container_id' group
MemBwSchema string `json:"mem_bw_schema,omitempty"`
}

type NetworkInterface struct {
// Name is the name of the network interface.
Name string

RxBytes uint64
RxPackets uint64
RxErrors uint64
RxDropped uint64
TxBytes uint64
TxPackets uint64
TxErrors uint64
TxDropped uint64
}

0 comments on commit 41a20b5

Please sign in to comment.
You can’t perform that action at this time.