mirror of
https://github.com/moby/moby.git
synced 2025-04-18 20:44:11 +03:00
The default is to send 3 messages at 1s intervals. That can be overridden in "docker network create" using: -o com.docker.network.advertise_addr_nmsgs=3 -o com.docker.network.advertise_addr_ms=1000 Or, in daemon.json for each driver: "default-network-opts": { "bridge": { "com.docker.network.advertise_addr_nmsgs": "3", "com.docker.network.advertise_addr_ms": "1000" } } The allowed range is 0-3 for the number of messages, and 100-2000ms for the interval. Setting nmsgs to 0 disables the gratuitous ARP/NA messages. The default bridge will always use the built-in defaults, it cannot be configured. Signed-off-by: Rob Murray <rob.murray@docker.com>
74 lines
2.0 KiB
Go
74 lines
2.0 KiB
Go
//go:build !windows
|
|
|
|
package libnetwork
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/docker/docker/libnetwork/netlabel"
|
|
"github.com/docker/docker/libnetwork/osl"
|
|
|
|
"github.com/docker/docker/libnetwork/ipams/defaultipam"
|
|
)
|
|
|
|
type platformNetwork struct{} //nolint:nolintlint,unused // only populated on windows
|
|
|
|
// Stub implementations for DNS related functions
|
|
|
|
func (n *Network) startResolver() {
|
|
}
|
|
|
|
func addEpToResolver(
|
|
ctx context.Context,
|
|
netName, epName string,
|
|
config *containerConfig,
|
|
epIface *EndpointInterface,
|
|
resolvers []*Resolver,
|
|
) error {
|
|
return nil
|
|
}
|
|
|
|
func deleteEpFromResolver(epName string, epIface *EndpointInterface, resolvers []*Resolver) error {
|
|
return nil
|
|
}
|
|
|
|
func defaultIpamForNetworkType(networkType string) string {
|
|
return defaultipam.DriverName
|
|
}
|
|
|
|
func (n *Network) validatedAdvertiseAddrNMsgs() (*int, error) {
|
|
nMsgsStr, ok := n.DriverOptions()[netlabel.AdvertiseAddrNMsgs]
|
|
if !ok {
|
|
return nil, nil
|
|
}
|
|
nMsgs, err := strconv.Atoi(nMsgsStr)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("value for option "+netlabel.AdvertiseAddrNMsgs+" %q must be an integer", nMsgsStr)
|
|
}
|
|
if nMsgs < osl.AdvertiseAddrNMsgsMin || nMsgs > osl.AdvertiseAddrNMsgsMax {
|
|
return nil, fmt.Errorf(netlabel.AdvertiseAddrNMsgs+" must be in the range %d to %d",
|
|
osl.AdvertiseAddrNMsgsMin, osl.AdvertiseAddrNMsgsMax)
|
|
}
|
|
return &nMsgs, nil
|
|
}
|
|
|
|
func (n *Network) validatedAdvertiseAddrInterval() (*time.Duration, error) {
|
|
intervalStr, ok := n.DriverOptions()[netlabel.AdvertiseAddrIntervalMs]
|
|
if !ok {
|
|
return nil, nil
|
|
}
|
|
msecs, err := strconv.Atoi(intervalStr)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("value for option "+netlabel.AdvertiseAddrIntervalMs+" %q must be integer milliseconds", intervalStr)
|
|
}
|
|
interval := time.Duration(msecs) * time.Millisecond
|
|
if interval < osl.AdvertiseAddrIntervalMin || interval > osl.AdvertiseAddrIntervalMax {
|
|
return nil, fmt.Errorf(netlabel.AdvertiseAddrIntervalMs+" must be in the range %d to %d",
|
|
osl.AdvertiseAddrIntervalMin/time.Millisecond, osl.AdvertiseAddrIntervalMax/time.Millisecond)
|
|
}
|
|
return &interval, nil
|
|
}
|