diff --git a/configMaker.nix b/configMaker.nix
index 601ac4a..db938c3 100644
--- a/configMaker.nix
+++ b/configMaker.nix
@@ -33,9 +33,12 @@ let module_inst = {
};
};
vlans = {
- "users" = [ { begin = 3045; end = 4094; } ];
- "admin" = [ 3000 ];
- "uplink-cri" = [ 223 ];
+ "users".ids = [ { begin = 3045; end = 4094; } ];
+ "admin" = {
+ ids = [ 3000 ];
+ management = "10.0.0.2/22";
+ };
+ "uplink-cri".ids = [ 223 ];
};
};
module = import ./moduleMaker.nix [
diff --git a/moduleMaker.nix b/moduleMaker.nix
index 9227414..643e39a 100644
--- a/moduleMaker.nix
+++ b/moduleMaker.nix
@@ -8,8 +8,23 @@ in with lib; {
begin = mkOption { type = types.ints.unsigned; };
end = mkOption { type = types.ints.unsigned; };
};
+ vlan_type.options = {
+ ids = mkOption {
+ type = types.listOf (types.either types.ints.unsigned (types.submodule range_type));
+ default = [ ];
+ };
+ management = mkOption {
+ # FIXME : support ipv4 and ipv6, either static or dhcp (with the coffee)
+ type = types.nullOr types.str;
+ default = null;
+ description = ''
+ IP address with wich to permit management on this vlan.
+ Only one vlan can set an IP (this module limitation, not switch).
+ '';
+ };
+ };
in mkOption {
- type = types.attrsOf (types.listOf (types.either types.ints.unsigned (types.submodule range_type)));
+ type = types.attrsOf (types.submodule vlan_type);
};
interfaces = let
template = name: {
@@ -94,16 +109,37 @@ in with lib; {
"${builtins.toString id.begin}-${builtins.toString id.end}";
in ''${list}'';
vlan_map = vlan: let
- ids = map id_map cfg.vlans.${vlan};
+ ids = map id_map cfg.vlans.${vlan}.ids;
+ mgmt_flag = if !builtins.isNull cfg.vlans.${vlan}.management
+ then "irb.0" else "";
in ''
${vlan}
+ ${mgmt_flag}
${builtins.concatStringsSep "\n" ids}
'';
in map vlan_map (builtins.attrNames cfg.vlans);
+ irb_intf = let
+ addresses = map (vlan: vlan.management) (builtins.attrValues cfg.vlans);
+ addr = builtins.foldl' (acc: addr: if !builtins.isNull addr then addr else acc) null addresses;
+ in if !builtins.isNull addr then ''
+
+ irb
+
+ 0
+
+
+ ${addr}
+
+
+
+
+ ''
+ else "";
in [ ''
- ${builtins.concatStringsSep "\n" interface_xmls}
+ ${builtins.concatStringsSep "\n" interface_xmls}
+ ${irb_intf}
${builtins.concatStringsSep "\n" vlans}