Class: OsCtld::NetInterface::Base

Inherits:
Object
  • Object
show all
Includes:
Lockable
Defined in:
lib/osctld/net_interface/base.rb

Direct Known Subclasses

Veth

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Lockable

#exclusively, included, #inclusively, #init_lock, #lock, #unlock

Constructor Details

#initialize(ct, index) ⇒ Base

Returns a new instance of Base.



19
20
21
22
23
# File 'lib/osctld/net_interface/base.rb', line 19

def initialize(ct, index)
  @ct = ct
  @index = index
  init_lock
end

Instance Attribute Details

#ctObject (readonly, protected)

Returns the value of attribute ct.



160
161
162
# File 'lib/osctld/net_interface/base.rb', line 160

def ct
  @ct
end

#hwaddrObject (readonly)

Returns the value of attribute hwaddr.



17
18
19
# File 'lib/osctld/net_interface/base.rb', line 17

def hwaddr
  @hwaddr
end

#indexObject (readonly)

Returns the value of attribute index.



17
18
19
# File 'lib/osctld/net_interface/base.rb', line 17

def index
  @index
end

#max_rxObject (readonly)

Returns the value of attribute max_rx.



17
18
19
# File 'lib/osctld/net_interface/base.rb', line 17

def max_rx
  @max_rx
end

#max_txObject (readonly)

Returns the value of attribute max_tx.



17
18
19
# File 'lib/osctld/net_interface/base.rb', line 17

def max_tx
  @max_tx
end

#nameObject (readonly)

Returns the value of attribute name.



17
18
19
# File 'lib/osctld/net_interface/base.rb', line 17

def name
  @name
end

Class Method Details

.setupObject



13
# File 'lib/osctld/net_interface/base.rb', line 13

def self.setup; end

.type(name = nil) ⇒ Object



3
4
5
6
7
8
9
10
11
# File 'lib/osctld/net_interface/base.rb', line 3

def self.type(name = nil)
  if name
    NetInterface.register(name, self)
    @type = name

  else
    @type
  end
end

Instance Method Details

#add_ip(addr) ⇒ Object

Add IP address to this interface

Parameters:

  • addr (IPAddress)

Raises:

  • (NotImplementedError)


142
143
144
# File 'lib/osctld/net_interface/base.rb', line 142

def add_ip(addr)
  raise NotImplementedError
end

#can_add_ip?(_addr) ⇒ Boolean

Returns:

  • (Boolean)


136
137
138
# File 'lib/osctld/net_interface/base.rb', line 136

def can_add_ip?(_addr)
  true
end

#can_run_distconfig?Boolean

Called to check if DistConfig for network can be run

Returns:

  • (Boolean)


117
118
119
# File 'lib/osctld/net_interface/base.rb', line 117

def can_run_distconfig?
  true
end

#create(opts) ⇒ Object

Setup a new interface

Parameters:

  • opts (Hash)

    options, different per interface type, symbol keys



31
32
33
34
35
36
# File 'lib/osctld/net_interface/base.rb', line 31

def create(opts)
  @name = opts[:name]
  @hwaddr = opts[:hwaddr]
  @max_tx = opts.fetch(:max_tx, 0)
  @max_rx = opts.fetch(:max_rx, 0)
end

#del_ip(addr) ⇒ Object

Delete IP address from this interface

Parameters:

  • addr (IPAddress)

Raises:

  • (NotImplementedError)


148
149
150
# File 'lib/osctld/net_interface/base.rb', line 148

def del_ip(addr)
  raise NotImplementedError
end

#down(*_args) ⇒ Object

Called when the interface goes down



105
# File 'lib/osctld/net_interface/base.rb', line 105

def down(*_args); end

#dup(new_ct) ⇒ Object



152
153
154
155
156
# File 'lib/osctld/net_interface/base.rb', line 152

def dup(new_ct)
  ret = super()
  ret.instance_variable_set('@ct', new_ct)
  ret
end

#has_ip?(addr) ⇒ Boolean

Returns:

  • (Boolean)


128
129
130
131
132
133
134
# File 'lib/osctld/net_interface/base.rb', line 128

def has_ip?(addr)
  if ips(addr.ipv4? ? 4 : 6).detect { |v| v == addr }
    true
  else
    false
  end
end

#ips(v) ⇒ Array

List IP addresses

Returns:

  • (Array)

Raises:

  • (NotImplementedError)


123
124
125
# File 'lib/osctld/net_interface/base.rb', line 123

def ips(v)
  raise NotImplementedError
end

#is_down?Boolean

Returns:

  • (Boolean)


111
112
113
# File 'lib/osctld/net_interface/base.rb', line 111

def is_down?
  !is_up?
end

#is_up?Boolean

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


107
108
109
# File 'lib/osctld/net_interface/base.rb', line 107

def is_up?
  raise NotImplementedError
end

#load(cfg) ⇒ Object

Load configuration

Parameters:

  • cfg (Hash)

    configuration options, string keys



40
41
42
43
44
45
# File 'lib/osctld/net_interface/base.rb', line 40

def load(cfg)
  @name = cfg['name']
  @hwaddr = cfg['hwaddr']
  @max_tx = cfg.fetch('max_tx', 0)
  @max_rx = cfg.fetch('max_rx', 0)
end

#rename(new_name) ⇒ Object

Rename the interface within the container

Parameters:

  • new_name (String)


64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/osctld/net_interface/base.rb', line 64

def rename(new_name)
  old_name = inclusively { @name }
  exclusively { @name = new_name }

  Eventd.report(
    :ct_netif,
    action: :rename,
    pool: ct.pool.name,
    id: ct.id,
    name: old_name,
    new_name:
  )
end

#render_optsHash

Return variables for template generating LXC configuration for this interface

Returns:

  • (Hash)

Raises:

  • (NotImplementedError)


97
98
99
# File 'lib/osctld/net_interface/base.rb', line 97

def render_opts
  raise NotImplementedError
end

#saveHash

Dump configuration

Returns:

  • (Hash)

    hash with string keys, given the has that ‘load` has then restores the state from



50
51
52
53
54
55
56
57
58
59
60
# File 'lib/osctld/net_interface/base.rb', line 50

def save
  inclusively do
    {
      'type' => type.to_s,
      'name' => name,
      'hwaddr' => hwaddr,
      'max_tx' => max_tx,
      'max_rx' => max_rx
    }
  end
end

#set(opts) ⇒ Object

Change interface properties

Parameters:

  • opts (Hash)

    options, see subclasses for more information

Options Hash (opts):

  • :hwaddr (String)
  • :max_tx (Integer)
  • :max_rx (Integer)


83
84
85
86
87
88
89
# File 'lib/osctld/net_interface/base.rb', line 83

def set(opts)
  exclusively do
    @hwaddr = opts[:hwaddr] if opts.has_key?(:hwaddr)
    @max_tx = opts[:max_tx] if opts.has_key?(:max_tx)
    @max_rx = opts[:max_rx] if opts.has_key?(:max_rx)
  end
end

#setupObject

Initialize the interface on creation / osctld restart



92
# File 'lib/osctld/net_interface/base.rb', line 92

def setup; end

#typeObject



25
26
27
# File 'lib/osctld/net_interface/base.rb', line 25

def type
  self.class.type
end

#up(*_args) ⇒ Object

Called when the interface goes up



102
# File 'lib/osctld/net_interface/base.rb', line 102

def up(*_args); end