123456789101112131415161718192021222324252627282930313233343536373839 |
- package libnetwork
- import "syscall"
- type networkNamespace struct {
- path string
- interfaces []*Interface
- }
- // Create a new network namespace mounted on the provided path.
- func NewNamespace(path string) (Namespace, error) {
- if err := reexec(reexecCreateNamespace, path); err != nil {
- return nil, err
- }
- return &networkNamespace{path: path}, nil
- }
- func (n *networkNamespace) AddInterface(i *Interface) error {
- // TODO Open pipe, pass fd to child and write serialized Interface on it.
- if err := reexec(reexecMoveInterface, i.SrcName, i.DstName); err != nil {
- return err
- }
- n.interfaces = append(n.interfaces, i)
- return nil
- }
- func (n *networkNamespace) Interfaces() []*Interface {
- return n.interfaces
- }
- func (n *networkNamespace) Path() string {
- return n.path
- }
- func (n *networkNamespace) Destroy() error {
- // Assuming no running process is executing in this network namespace,
- // unmounting is sufficient to destroy it.
- return syscall.Unmount(n.path, syscall.MNT_DETACH)
- }
|