A MacVTap device can operate in one of four modes which are defined at
creation time and determine how the tap endpoints communicate between
each other. Those modes are the 'vepa', 'bridge', 'private', and the
'passthru' mode.

This patch creates a new nicparam slot named 'macvtap_mode', which will
specify the operation mode of a MacVTap NIC. The macvtap_mode parameter
will only be used if the network's connection mode is set to macvtap,
since it does not make sense in other modes. Finally we've created a
separate constant variable for each one of the four macvtap modes.

Signed-off-by: Dimitris Bliablias <db...@skroutz.gr>
---
 src/Ganeti/Constants.hs   | 33 +++++++++++++++++++++++++++++++--
 src/Ganeti/Objects/Nic.hs |  1 +
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs
index a0d681d..7e81446 100644
--- a/src/Ganeti/Constants.hs
+++ b/src/Ganeti/Constants.hs
@@ -2523,11 +2523,15 @@ nicMode = "mode"
 nicVlan :: String
 nicVlan = "vlan"
 
+nicMacvtapMode :: String
+nicMacvtapMode = "macvtap_mode"
+
 nicsParameterTypes :: Map String VType
 nicsParameterTypes =
   Map.fromList [(nicMode, vtypeString),
                 (nicLink, vtypeString),
-                (nicVlan, vtypeString)]
+                (nicVlan, vtypeString),
+                (nicMacvtapMode, vtypeString)]
 
 nicsParameters :: FrozenSet String
 nicsParameters = ConstantUtils.mkSet (Map.keys nicsParameterTypes)
@@ -2550,6 +2554,26 @@ nicIpPool = Types.nICModeToRaw NMPool
 nicValidModes :: FrozenSet String
 nicValidModes = ConstantUtils.mkSet $ map Types.nICModeToRaw [minBound..]
 
+nicMacvtapModeVepa :: String
+nicMacvtapModeVepa = "vepa"
+
+nicMacvtapModeBridge :: String
+nicMacvtapModeBridge = "bridge"
+
+nicMacvtapModePrivate :: String
+nicMacvtapModePrivate = "private"
+
+nicMacvtapModePassthru :: String
+nicMacvtapModePassthru = "passthru"
+
+nicMacvtapModes :: FrozenSet String
+nicMacvtapModes =
+  ConstantUtils.mkSet [ nicMacvtapModeVepa
+                      , nicMacvtapModeBridge
+                      , nicMacvtapModePrivate
+                      , nicMacvtapModePassthru
+                      ]
+
 releaseAction :: String
 releaseAction = "release"
 
@@ -2640,6 +2664,9 @@ inicNetwork = "network"
 inicVlan :: String
 inicVlan = "vlan"
 
+inicMacvtapMode :: String
+inicMacvtapMode = "macvtap_mode"
+
 inicParamsTypes :: Map String VType
 inicParamsTypes =
   Map.fromList [(inicBridge, VTypeMaybeString),
@@ -2649,7 +2676,8 @@ inicParamsTypes =
                 (inicMode, VTypeString),
                 (inicName, VTypeMaybeString),
                 (inicNetwork, VTypeMaybeString),
-                (inicVlan, VTypeMaybeString)]
+                (inicVlan, VTypeMaybeString),
+                (inicMacvtapMode, VTypeMaybeString)]
 
 inicParams :: FrozenSet String
 inicParams = ConstantUtils.mkSet (Map.keys inicParamsTypes)
@@ -4316,6 +4344,7 @@ niccDefaults =
   [ (nicMode, PyValueEx nicModeBridged)
   , (nicLink, PyValueEx defaultBridge)
   , (nicVlan, PyValueEx "")
+  , (nicMacvtapMode, PyValueEx "")
   ]
 
 -- | All of the following values are quite arbitrary - there are no
diff --git a/src/Ganeti/Objects/Nic.hs b/src/Ganeti/Objects/Nic.hs
index 270151d..03a4295 100644
--- a/src/Ganeti/Objects/Nic.hs
+++ b/src/Ganeti/Objects/Nic.hs
@@ -46,6 +46,7 @@ $(buildParam "Nic" "nicp"
   [ simpleField "mode" [t| NICMode |]
   , simpleField "link" [t| String  |]
   , simpleField "vlan" [t| String |]
+  , simpleField "macvtap_mode" [t| String |]
   ])
 
 $(buildObject "PartialNic" "nic" $
-- 
2.1.4

Reply via email to