mirror of https://github.com/containers/podman.git
libpod: Re-work the container's network state to help code sharing
This replaces the NetworkJail string field with a struct pointer named NetNS. This does not try to emulate the complete NetNS interface but does help to re-use code that just refers to c.state.NetNS. [NO NEW TESTS NEEDED] Signed-off-by: Doug Rabson <dfr@rabson.org>
This commit is contained in:
parent
36cfd05a7d
commit
c5f64d9f58
|
@ -6,12 +6,20 @@ package libpod
|
||||||
// replaceNetNS handle network namespace transitions after updating a
|
// replaceNetNS handle network namespace transitions after updating a
|
||||||
// container's state.
|
// container's state.
|
||||||
func replaceNetNS(netNSPath string, ctr *Container, newState *ContainerState) error {
|
func replaceNetNS(netNSPath string, ctr *Container, newState *ContainerState) error {
|
||||||
// On FreeBSD, we just record the network jail's name in our state.
|
if netNSPath != "" {
|
||||||
newState.NetworkJail = netNSPath
|
// On FreeBSD, we just record the network jail's name in our state.
|
||||||
|
newState.NetNS = &jailNetNS{Name: netNSPath}
|
||||||
|
} else {
|
||||||
|
newState.NetNS = nil
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// getNetNSPath retrieves the netns path to be stored in the database
|
// getNetNSPath retrieves the netns path to be stored in the database
|
||||||
func getNetNSPath(ctr *Container) string {
|
func getNetNSPath(ctr *Container) string {
|
||||||
return ctr.state.NetworkJail
|
if ctr.state.NetNS != nil {
|
||||||
|
return ctr.state.NetNS.Name
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,11 +4,20 @@
|
||||||
package libpod
|
package libpod
|
||||||
|
|
||||||
type containerPlatformState struct {
|
type containerPlatformState struct {
|
||||||
// NetworkJail is the name of the container's network VNET
|
// NetNS is the name of the container's network VNET
|
||||||
// jail. Will only be set if config.CreateNetNS is true, or
|
// jail. Will only be set if config.CreateNetNS is true, or
|
||||||
// the container was told to join another container's network
|
// the container was told to join another container's network
|
||||||
// namespace.
|
// namespace.
|
||||||
NetworkJail string `json:"-"`
|
NetNS *jailNetNS `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type jailNetNS struct {
|
||||||
|
Name string `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ns *jailNetNS) Path() string {
|
||||||
|
// The jail name approximately corresponds to the Linux netns path
|
||||||
|
return ns.Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func networkDisabled(c *Container) (bool, error) {
|
func networkDisabled(c *Container) (bool, error) {
|
||||||
|
@ -16,7 +25,7 @@ func networkDisabled(c *Container) (bool, error) {
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
if !c.config.PostConfigureNetNS {
|
if !c.config.PostConfigureNetNS {
|
||||||
return c.state.NetworkJail == "", nil
|
return c.state.NetNS != nil, nil
|
||||||
}
|
}
|
||||||
return false, nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,8 +26,8 @@ var (
|
||||||
|
|
||||||
// Network stubs to decouple container_internal_freebsd.go from
|
// Network stubs to decouple container_internal_freebsd.go from
|
||||||
// networking_freebsd.go so they can be reviewed separately.
|
// networking_freebsd.go so they can be reviewed separately.
|
||||||
func (r *Runtime) createNetNS(ctr *Container) (netJail string, q map[string]types.StatusBlock, retErr error) {
|
func (r *Runtime) createNetNS(ctr *Container) (netJail *jailNetNS, q map[string]types.StatusBlock, retErr error) {
|
||||||
return "", nil, errors.New("not implemented (*Runtime) createNetNS")
|
return nil, nil, errors.New("not implemented (*Runtime) createNetNS")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Runtime) teardownNetNS(ctr *Container) error {
|
func (r *Runtime) teardownNetNS(ctr *Container) error {
|
||||||
|
@ -51,7 +51,7 @@ func (c *Container) unmountSHM(path string) error {
|
||||||
func (c *Container) prepare() error {
|
func (c *Container) prepare() error {
|
||||||
var (
|
var (
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
jailName string
|
ctrNS *jailNetNS
|
||||||
networkStatus map[string]types.StatusBlock
|
networkStatus map[string]types.StatusBlock
|
||||||
createNetNSErr, mountStorageErr error
|
createNetNSErr, mountStorageErr error
|
||||||
mountPoint string
|
mountPoint string
|
||||||
|
@ -63,9 +63,9 @@ func (c *Container) prepare() error {
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
// Set up network namespace if not already set up
|
// Set up network namespace if not already set up
|
||||||
noNetNS := c.state.NetworkJail == ""
|
noNetNS := c.state.NetNS == nil
|
||||||
if c.config.CreateNetNS && noNetNS && !c.config.PostConfigureNetNS {
|
if c.config.CreateNetNS && noNetNS && !c.config.PostConfigureNetNS {
|
||||||
jailName, networkStatus, createNetNSErr = c.runtime.createNetNS(c)
|
ctrNS, networkStatus, createNetNSErr = c.runtime.createNetNS(c)
|
||||||
if createNetNSErr != nil {
|
if createNetNSErr != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ func (c *Container) prepare() error {
|
||||||
defer tmpStateLock.Unlock()
|
defer tmpStateLock.Unlock()
|
||||||
|
|
||||||
// Assign NetNS attributes to container
|
// Assign NetNS attributes to container
|
||||||
c.state.NetworkJail = jailName
|
c.state.NetNS = ctrNS
|
||||||
c.state.NetworkStatus = networkStatus
|
c.state.NetworkStatus = networkStatus
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
@ -164,7 +164,7 @@ func (c *Container) addNetworkContainer(g *generate.Generator, ctr string) error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("retrieving dependency %s of container %s from state: %w", ctr, c.ID(), err)
|
return fmt.Errorf("retrieving dependency %s of container %s from state: %w", ctr, c.ID(), err)
|
||||||
}
|
}
|
||||||
g.AddAnnotation("org.freebsd.parentJail", nsCtr.state.NetworkJail)
|
g.AddAnnotation("org.freebsd.parentJail", nsCtr.state.NetNS.Name)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ func openDirectory(path string) (fd int, err error) {
|
||||||
|
|
||||||
func (c *Container) addNetworkNamespace(g *generate.Generator) error {
|
func (c *Container) addNetworkNamespace(g *generate.Generator) error {
|
||||||
if c.config.CreateNetNS {
|
if c.config.CreateNetNS {
|
||||||
g.AddAnnotation("org.freebsd.parentJail", c.state.NetworkJail)
|
g.AddAnnotation("org.freebsd.parentJail", c.state.NetNS.Name)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -272,7 +272,7 @@ func (c *Container) isSlirp4netnsIPv6() (bool, error) {
|
||||||
|
|
||||||
// check for net=none
|
// check for net=none
|
||||||
func (c *Container) hasNetNone() bool {
|
func (c *Container) hasNetNone() bool {
|
||||||
return c.state.NetworkJail == ""
|
return c.state.NetNS == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func setVolumeAtime(mountPoint string, st os.FileInfo) error {
|
func setVolumeAtime(mountPoint string, st os.FileInfo) error {
|
||||||
|
|
Loading…
Reference in New Issue