Signed-off-by: Alexandre Derumier <aderum...@odiso.com>
---
 src/PVE/INotify.pm | 29 ++++++++++++++++++++++++++++-
 1 file changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm
index fe6cad8..0dae177 100644
--- a/src/PVE/INotify.pm
+++ b/src/PVE/INotify.pm
@@ -955,6 +955,8 @@ sub __read_etc_network_interfaces {
                        'bond_miimon' => 1,
                        'bond_xmit_hash_policy' => 1,
                        'uplink-id' => 1,
+                       'vrf' => 1,
+                       'vrf-table' => 1,
                        'vlan-protocol' => 1,
                        'vxlan-id' => 1,
                        'vxlan-svcnodeip' => 1,
@@ -1095,6 +1097,8 @@ sub __read_etc_network_interfaces {
        } else {
            if ($d->{'vxlan-id'}) {
                $d->{type} = 'vxlan';
+           } elsif ($d->{'vrf-table'}) {
+               $d->{type} = 'vrfint';
            } elsif (!$d->{ovs_type}) {
                $d->{type} = 'unknown';
            } elsif ($d->{ovs_type} eq 'OVSIntPort') {
@@ -1206,6 +1210,17 @@ sub __interface_to_string {
     } elsif ($d->{type} eq 'vlan') {
        die "$iface: wrong vlan-protocol $d->{'vlan-protocol'}\n" 
            if $d->{'vlan-protocol'} && $d->{'vlan-protocol'} ne '802.1ad' && 
$d->{'vlan-protocol'} ne '802.1q';
+
+    } elsif ($d->{type} eq 'vrfint') {
+
+       my $vrftable = $d->{'vrf-table'};
+       if ($vrftable) {
+           if ($vrftable =~ m/(\d+)$/) {
+               die "$iface: vrf-table $vrftable must be between 1001 and 1255" 
if ($vrftable < 1001 || $vrftable > 1255);
+           } else {
+               die "$iface: vrf-table $vrftable need to be auto if no tableid 
is defined" if $vrftable ne 'auto';
+           }
+       }
        
     } elsif ($d->{type} eq 'vxlan') {
 
@@ -1457,6 +1472,16 @@ sub __write_etc_network_interfaces {
        }
     }
 
+    # check vrf
+    my $vrfs = {};
+    foreach my $iface (keys %$ifaces) {
+       my $d = $ifaces->{$iface};
+       if ($d->{'type'} eq 'vrfint') {
+           die "vrf $iface already exist" if $vrfs->{$iface};
+           $vrfs->{$iface} = 1;
+       }
+    }
+
     # check uplink
     my $uplinks = {};
     foreach my $iface (keys %$ifaces) {
@@ -1501,6 +1526,8 @@ sub __write_etc_network_interfaces {
        if ($d->{'bridge-access'} && 
!$bridges->{$bridgeports->{$iface}}->{bridge_vlan_aware}) {
            die "iface $iface - bridge-access option can be only used if 
interface is in a vlan aware bridge\n";
        }
+
+       die "vrf $d->{vrf} don't exist" if $d->{vrf} && !$vrfs->{$d->{vrf}};
     }
 
     my $raw = <<'NETWORKDOC';
@@ -1528,6 +1555,7 @@ NETWORKDOC
        bridge => 400000,
        OVSBridge => 400000,
        vxlan => 500000,
+       vrfint => 600000
    };
 
     my $lookup_type_prio = sub {
@@ -1536,7 +1564,6 @@ NETWORKDOC
        my ($rootiface, @rest) = split(/[.:]/, $iface);
        my $childlevel = scalar(@rest);
        my $n = $ifaces->{$rootiface};
-
        my $pri = $if_type_hash->{$n->{type}} + $childlevel
            if $n->{type} && $n->{type} ne 'unknown';
 
-- 
2.11.0

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to