Class: OsCtld::NetInterface::Bridge
- Inherits:
-
NetInterface::Veth
- Object
- NetInterface::Veth
- OsCtld::NetInterface::Bridge
show all
- Includes:
- OsCtl::Lib::Utils::Log, OsCtl::Lib::Utils::System, Utils::Ip, Utils::SwitchUser
- Defined in:
- lib/osctld/net_interface/bridge.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
#ct_attach, #ct_syscmd
Methods included from Utils::Ip
#delete_link_by_ifindex, #ip, #link_ifindex_by_name, #tc
Instance Attribute Details
#dhcp ⇒ Object
Returns the value of attribute dhcp.
12
13
14
|
# File 'lib/osctld/net_interface/bridge.rb', line 12
def dhcp
@dhcp
end
|
#gateways ⇒ Object
Returns the value of attribute gateways.
12
13
14
|
# File 'lib/osctld/net_interface/bridge.rb', line 12
def gateways
@gateways
end
|
#link ⇒ Object
Returns the value of attribute link.
12
13
14
|
# File 'lib/osctld/net_interface/bridge.rb', line 12
def link
@link
end
|
Instance Method Details
#add_ip(addr) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
# File 'lib/osctld/net_interface/bridge.rb', line 80
def add_ip(addr)
super
v = addr.ipv4? ? 4 : 6
ct.inclusively do
next if ct.state != :running
ct_syscmd(
ct,
['ip', "-#{v}", 'addr', 'add', addr.to_string, 'dev', name],
valid_rcs: [2]
)
end
end
|
#create(opts) ⇒ Object
19
20
21
22
23
24
25
|
# File 'lib/osctld/net_interface/bridge.rb', line 19
def create(opts)
super
@link = opts[:link]
@dhcp = opts.has_key?(:dhcp) ? opts[:dhcp] : true
@gateways = opts[:gateways] || { 4 => 'auto', 6 => 'auto' }
end
|
#del_ip(addr) ⇒ Object
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/osctld/net_interface/bridge.rb', line 97
def del_ip(addr)
super
v = addr.ipv4? ? 4 : 6
ct.inclusively do
next if ct.state != :running
ct_syscmd(
ct,
['ip', "-#{v}", 'addr', 'del', addr.to_string, 'dev', name],
valid_rcs: [2]
)
end
end
|
#dup(new_ct) ⇒ Object
126
127
128
129
130
131
|
# File 'lib/osctld/net_interface/bridge.rb', line 126
def dup(new_ct)
ret = super
ret.instance_variable_set('@gateways', gateways.dup)
ret.instance_variable_set('@gateway_cache', nil)
ret
end
|
#gateway(v) ⇒ String
122
123
124
|
# File 'lib/osctld/net_interface/bridge.rb', line 122
def gateway(v)
get_gateway(v) || (raise 'no gateway set')
end
|
#get_gateway(v) ⇒ Object
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
# File 'lib/osctld/net_interface/bridge.rb', line 135
def get_gateway(v)
inclusively do
@gateway_cache ||= {}
return @gateway_cache[v] if @gateway_cache.has_key?(v)
gw = case gateways[v]
when nil, 'auto'
any_ifaddr = Socket.getifaddrs.detect do |ifaddr|
ifaddr.name == link && ifaddr.addr.ip? && ifaddr.addr.send(:"ipv#{v}?")
end
any_ifaddr ? any_ifaddr.addr.ip_address : nil
when 'none'
nil
else
gateways[v]
end
@gateway_cache[v] = gw
end
end
|
#has_gateway?(v) ⇒ Boolean
116
117
118
|
# File 'lib/osctld/net_interface/bridge.rb', line 116
def has_gateway?(v)
!get_gateway(v).nil?
end
|
#load(cfg) ⇒ Object
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
# File 'lib/osctld/net_interface/bridge.rb', line 27
def load(cfg)
super
@link = cfg['link']
@dhcp = cfg.has_key?('dhcp') ? cfg['dhcp'] : true
@gateways = if cfg['gateways']
[4, 6].to_h do |ip_v|
[ip_v, cfg['gateways']["v#{ip_v}"] || 'auto']
end
else
{ 4 => 'auto', 6 => 'auto' }
end
end
|
#render_opts ⇒ Object
72
73
74
75
76
77
78
|
# File 'lib/osctld/net_interface/bridge.rb', line 72
def render_opts
inclusively do
super.merge({
link:
})
end
end
|
#save ⇒ Object
42
43
44
45
46
47
48
49
50
|
# File 'lib/osctld/net_interface/bridge.rb', line 42
def save
inclusively do
super.merge({
'link' => link,
'dhcp' => dhcp,
'gateways' => gateways.any? ? gateways.transform_keys { |k| "v#{k}" } : nil
})
end
end
|
#set(opts) ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/osctld/net_interface/bridge.rb', line 56
def set(opts)
NetInterface.sync_host_link_registry do
super
exclusively do
@link = opts[:link] if opts[:link]
@dhcp = opts[:dhcp] if opts.has_key?(:dhcp)
if opts[:gateways]
@gateways.update(opts[:gateways])
@gateway_cache = nil
end
end
end
end
|