Class: OsCtld::NetInterface::Bridge
- Inherits:
-
NetInterface::Veth
- Object
- NetInterface::Veth
- OsCtld::NetInterface::Bridge
- 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
-
#dhcp ⇒ Object
readonly
Returns the value of attribute dhcp.
-
#gateways ⇒ Object
readonly
Returns the value of attribute gateways.
-
#link ⇒ Object
readonly
Returns the value of attribute link.
Instance Method Summary collapse
- #add_ip(addr) ⇒ Object
- #create(opts) ⇒ Object
- #del_ip(addr) ⇒ Object
- #dup(new_ct) ⇒ Object
- #gateway(v) ⇒ String
- #get_gateway(v) ⇒ Object protected
- #has_gateway?(v) ⇒ Boolean
- #load(cfg) ⇒ Object
- #render_opts ⇒ Object
- #save ⇒ Object
- #set(opts) ⇒ Object
Methods included from Utils::SwitchUser
Methods included from Utils::Ip
Instance Attribute Details
#dhcp ⇒ Object (readonly)
Returns the value of attribute dhcp.
12 13 14 |
# File 'lib/osctld/net_interface/bridge.rb', line 12 def dhcp @dhcp end |
#gateways ⇒ Object (readonly)
Returns the value of attribute gateways.
12 13 14 |
# File 'lib/osctld/net_interface/bridge.rb', line 12 def gateways @gateways end |
#link ⇒ Object (readonly)
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
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/osctld/net_interface/bridge.rb', line 77 def add_ip(addr) super v = addr.ipv4? ? 4 : 6 ct.inclusively do next if ct.state != :running # Add IP within the CT 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
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/osctld/net_interface/bridge.rb', line 94 def del_ip(addr) super v = addr.ipv4? ? 4 : 6 ct.inclusively do next if ct.state != :running # Remove IP from within the CT ct_syscmd( ct, ['ip', "-#{v}", 'addr', 'del', addr.to_string, 'dev', name], valid_rcs: [2] ) end end |
#dup(new_ct) ⇒ Object
123 124 125 126 127 128 |
# File 'lib/osctld/net_interface/bridge.rb', line 123 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
119 120 121 |
# File 'lib/osctld/net_interface/bridge.rb', line 119 def gateway(v) get_gateway(v) || (raise 'no gateway set') end |
#get_gateway(v) ⇒ Object (protected)
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/osctld/net_interface/bridge.rb', line 132 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
113 114 115 |
# File 'lib/osctld/net_interface/bridge.rb', line 113 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
69 70 71 72 73 74 75 |
# File 'lib/osctld/net_interface/bridge.rb', line 69 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 |
# File 'lib/osctld/net_interface/bridge.rb', line 56 def set(opts) exclusively do super @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 |