]> git.proxmox.com Git - pve-network.git/blame - PVE/Network/Network.pm
import run_command
[pve-network.git] / PVE / Network / Network.pm
CommitLineData
92b6f291
AD
1package PVE::Network::Network;
2
3use strict;
4use warnings;
434125ce 5
92b6f291 6use Data::Dumper;
c665cefc 7use JSON;
434125ce
TL
8
9use PVE::Tools qw(extract_param dir_glob_regex run_command);
92b6f291
AD
10use PVE::Cluster qw(cfs_read_file cfs_write_file cfs_lock_file);
11use PVE::Network::Network::Plugin;
12use PVE::Network::Network::VnetPlugin;
13use PVE::Network::Network::VlanPlugin;
14use PVE::Network::Network::VxlanMulticastPlugin;
15
16PVE::Network::Network::VnetPlugin->register();
17PVE::Network::Network::VlanPlugin->register();
18PVE::Network::Network::VxlanMulticastPlugin->register();
19PVE::Network::Network::Plugin->init();
20
21
22sub network_config {
23 my ($cfg, $networkid, $noerr) = @_;
24
25 die "no network ID specified\n" if !$networkid;
26
27 my $scfg = $cfg->{ids}->{$networkid};
28 die "network '$networkid' does not exists\n" if (!$noerr && !$scfg);
29
30 return $scfg;
31}
32
33sub config {
39d04c82
AD
34 my $config = cfs_read_file("networks.cfg.new");
35 $config = cfs_read_file("networks.cfg") if !keys %{$config->{ids}};
36 return $config;
92b6f291
AD
37}
38
39sub write_config {
40 my ($cfg) = @_;
41
39d04c82 42 cfs_write_file("networks.cfg.new", $cfg);
92b6f291
AD
43}
44
45sub lock_network_config {
46 my ($code, $errmsg) = @_;
47
39d04c82 48 cfs_lock_file("networks.cfg.new", undef, $code);
92b6f291
AD
49 my $err = $@;
50 if ($err) {
51 $errmsg ? die "$errmsg: $err" : die $err;
52 }
53}
54
55sub networks_ids {
56 my ($cfg) = @_;
57
58 return keys %{$cfg->{ids}};
59}
60
61sub complete_network {
62 my ($cmdname, $pname, $cvalue) = @_;
63
64 my $cfg = PVE::Network::Network::config();
65
66 return $cmdname eq 'add' ? [] : [ PVE::Network::Network::networks_ids($cfg) ];
67}
68
c665cefc
AD
69sub status {
70
71 my $cmd = ['ifquery', '-a', '-c', '-o','json'];
72 my $result;;
73
74 my $code = sub {
75 my $line = shift;
76 $result .= $line;
77 };
78
79 eval {
434125ce 80 run_command($cmd, outfunc => $code, errfunc => $code);
c665cefc
AD
81 };
82
83 my $resultjson = JSON::decode_json($result);
84 my $interfaces = {};
85
86 foreach my $interface (@$resultjson) {
87 $interfaces->{$interface->{'name'}}->{status} = $interface->{'status'};
88 $interfaces->{$interface->{'name'}}->{config} = $interface->{'config'};
89 $interfaces->{$interface->{'name'}}->{config_status} = $interface->{'config_status'};
90 }
91
92 return $interfaces;
93}
94
92b6f291 951;