Class: Y2Network::Interface

Inherits:
Object
  • Object
show all
Includes:
Yast::Logger
Defined in:
src/lib/y2network/interface.rb

Overview

Network interface.

It represents network interfaces, no matter whether they are physical or virtual ones. This class (including its subclasses) are basically responsible for holding the hardware configuration (see Hwinfo), including naming and driver information.

Logical configuration, like TCP/IP or WIFI settings, are handled through ConnectionConfig::Base classes. Actually, relationships with other interfaces are kept in those configuration objects too.

Direct Known Subclasses

PhysicalInterface, VirtualInterface

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, type: InterfaceType::ETHERNET) ⇒ Interface

Constructor

Parameters:

  • name (String)

    Interface name (e.g., "eth0")

  • type (InterfaceType) (defaults to: InterfaceType::ETHERNET)

    Interface type


71
72
73
74
75
76
# File 'src/lib/y2network/interface.rb', line 71

def initialize(name, type: InterfaceType::ETHERNET)
  @name = name.freeze
  @type = type
  # TODO: move renaming logic to physical interfaces only
  @renaming_mechanism = :none
end

Instance Attribute Details

#hardwareHwInfo (readonly)

Returns:

  • (HwInfo)

45
46
47
# File 'src/lib/y2network/interface.rb', line 45

def hardware
  @hardware
end

#nameString

Returns Device name ('eth0', 'wlan0', etc.).

Returns:

  • (String)

    Device name ('eth0', 'wlan0', etc.)


41
42
43
# File 'src/lib/y2network/interface.rb', line 41

def name
  @name
end

#old_nameString? (readonly)

Returns:

  • (String, nil)

51
52
53
# File 'src/lib/y2network/interface.rb', line 51

def old_name
  @old_name
end

#renaming_mechanismSymbol

Returns Mechanism to rename the interface (:none -no rename-, :bus_id or :mac).

Returns:

  • (Symbol)

    Mechanism to rename the interface (:none -no rename-, :bus_id or :mac)


49
50
51
# File 'src/lib/y2network/interface.rb', line 49

def renaming_mechanism
  @renaming_mechanism
end

#typeInterfaceType

Returns Interface type.

Returns:


43
44
45
# File 'src/lib/y2network/interface.rb', line 43

def type
  @type
end

#udev_ruleUdevRule

Returns:


47
48
49
# File 'src/lib/y2network/interface.rb', line 47

def udev_rule
  @udev_rule
end

Class Method Details

.from_connection(conn) ⇒ Object

Builds an interface based on a connection

Parameters:

  • conn (ConnectionConfig)

    Connection configuration related to the network interface


57
58
59
60
61
62
63
64
# File 'src/lib/y2network/interface.rb', line 57

def from_connection(conn)
  # require here to avoid circular dependency
  require "y2network/physical_interface"
  require "y2network/virtual_interface"

  interface_class = conn.virtual? ? VirtualInterface : PhysicalInterface
  interface_class.new(conn.interface || conn.name, type: conn.type)
end

Instance Method Details

#==(other) ⇒ Boolean Also known as: eql?

Note:

although it is preferable to use Yast2::Equatable it uses the class hash for comparing objects and it will fail when comparing with subclasses objects (bsc#1188908)

Determines whether two interfaces are equal

Parameters:

  • other (Interface)

    Interface to compare with

Returns:

  • (Boolean)

101
102
103
104
105
# File 'src/lib/y2network/interface.rb', line 101

def ==(other)
  return false unless other.is_a?(Interface)

  name == other.name
end

#configHash<String, String>

Complete configuration of the interface

Returns:

  • (Hash<String, String>)

    option, value hash map


119
120
121
# File 'src/lib/y2network/interface.rb', line 119

def config
  system_config(name)
end

#connected?Boolean

Whether the interface is connected or not based on hardware information

Returns:

  • (Boolean)

See Also:


82
83
84
# File 'src/lib/y2network/interface.rb', line 82

def connected?
  !!hardware&.connected?
end

#driversArray<Driver>

Returns the list of kernel modules

Returns:

See Also:


90
91
92
# File 'src/lib/y2network/interface.rb', line 90

def drivers
  hardware&.drivers || []
end

#hashObject

Used by Array or Hash in order to compare equality of elements (bsc#1186082)


112
113
114
# File 'src/lib/y2network/interface.rb', line 112

def hash
  name.hash
end

#hotplug?Boolean

Returns true if the interface is hotplug.

Returns:

  • (Boolean)

    true if the interface is hotplug


155
156
157
158
159
# File 'src/lib/y2network/interface.rb', line 155

def hotplug?
  return false unless hardware

  ["usb", "pcmcia"].include?(hardware.hotplug)
end

#rename(new_name, mechanism) ⇒ Object

Renames the interface

Parameters:

  • new_name (String)

    New interface's name

  • mechanism (Symbol)

    Property to base the rename on (:mac or :bus_id)


127
128
129
130
131
132
# File 'src/lib/y2network/interface.rb', line 127

def rename(new_name, mechanism)
  log.info "Rename interface '#{name}' to '#{new_name}' using the '#{mechanism}'"
  @old_name = name if name != new_name # same name, just set different mechanism
  @name = new_name.freeze
  @renaming_mechanism = mechanism
end

#update_udev_ruleUdevRule

Updates or creates the associated udev rule depending on the renaming mechanism selected

Returns:


138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'src/lib/y2network/interface.rb', line 138

def update_udev_rule
  log.info("Updating udev rule for #{name} based on: #{renaming_mechanism.inspect}")

  case renaming_mechanism
  when :mac
    udev_rule&.rename_by_mac(name, hardware.mac)

    @udev_rule ||= Y2Network::UdevRule.new_mac_based_rename(name, hardware.mac)
  when :bus_id
    udev_rule&.rename_by_bus_id(name, hardware.busid, hardware.dev_port)

    @udev_rule ||=
      Y2Network::UdevRule.new_bus_id_based_rename(name, hardware.busid, hardware.dev_port)
  end
end