macvlan: add MTU validation to loadNetConf
Signed-off-by: Bruce Ma <brucema19901024@gmail.com>
This commit is contained in:
@ -23,9 +23,9 @@ Since each macvlan interface has its own MAC address, it makes it easy to use wi
|
|||||||
|
|
||||||
* `name` (string, required): the name of the network
|
* `name` (string, required): the name of the network
|
||||||
* `type` (string, required): "macvlan"
|
* `type` (string, required): "macvlan"
|
||||||
* `master` (string, optional): name of the host interface to enslave. Defaults to default route interace.
|
* `master` (string, optional): name of the host interface to enslave. Defaults to default route interface.
|
||||||
* `mode` (string, optional): one of "bridge", "private", "vepa", "passthru". Defaults to "bridge".
|
* `mode` (string, optional): one of "bridge", "private", "vepa", "passthru". Defaults to "bridge".
|
||||||
* `mtu` (integer, optional): explicitly set MTU to the specified value. Defaults to the value chosen by the kernel.
|
* `mtu` (integer, optional): explicitly set MTU to the specified value. Defaults to the value chosen by the kernel. The value must be \[0, master's MTU\].
|
||||||
* `ipam` (dictionary, required): IPAM configuration to be used for this network. For interface only without ip address, create empty dictionary.
|
* `ipam` (dictionary, required): IPAM configuration to be used for this network. For interface only without ip address, create empty dictionary.
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
@ -85,9 +85,27 @@ func loadConf(bytes []byte) (*NetConf, string, error) {
|
|||||||
}
|
}
|
||||||
n.Master = defaultRouteInterface
|
n.Master = defaultRouteInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check existing and MTU of master interface
|
||||||
|
masterMTU, err := getMTUByName(n.Master)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
|
if n.MTU < 0 || n.MTU > masterMTU {
|
||||||
|
return nil, "", fmt.Errorf("invalid MTU %d, must be [0, master MTU(%d)]", n.MTU, masterMTU)
|
||||||
|
}
|
||||||
|
|
||||||
return n, n.CNIVersion, nil
|
return n, n.CNIVersion, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getMTUByName(ifName string) (int, error) {
|
||||||
|
link, err := netlink.LinkByName(ifName)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return link.Attrs().MTU, nil
|
||||||
|
}
|
||||||
|
|
||||||
func modeFromString(s string) (netlink.MacvlanMode, error) {
|
func modeFromString(s string) (netlink.MacvlanMode, error) {
|
||||||
switch s {
|
switch s {
|
||||||
case "", "bridge":
|
case "", "bridge":
|
||||||
|
Reference in New Issue
Block a user