49 lines
1.2 KiB
Elixir
49 lines
1.2 KiB
Elixir
defmodule Towerops.Snmp.MacAddress do
|
|
@moduledoc """
|
|
SNMP MAC address schema for bridge forwarding database entries.
|
|
|
|
Stores MAC address table entries discovered via BRIDGE-MIB
|
|
dot1dTpFdbTable (1.3.6.1.2.1.17.4.3) and Q-BRIDGE-MIB
|
|
dot1qTpFdbTable (1.3.6.1.2.1.17.7.1.2.2).
|
|
"""
|
|
use Ecto.Schema
|
|
|
|
import Ecto.Changeset
|
|
|
|
@primary_key {:id, :binary_id, autogenerate: true}
|
|
@foreign_key_type :binary_id
|
|
schema "snmp_mac_addresses" do
|
|
field :mac_address, :string
|
|
field :vlan_id, :integer
|
|
field :port_index, :integer
|
|
field :entry_status, :string
|
|
field :last_seen_at, :utc_datetime
|
|
|
|
belongs_to :device, Towerops.Devices.Device
|
|
belongs_to :interface, Towerops.Snmp.Interface
|
|
|
|
timestamps(type: :utc_datetime)
|
|
end
|
|
|
|
@doc false
|
|
def changeset(mac_address, attrs) do
|
|
mac_address
|
|
|> cast(attrs, [
|
|
:device_id,
|
|
:interface_id,
|
|
:mac_address,
|
|
:vlan_id,
|
|
:port_index,
|
|
:entry_status,
|
|
:last_seen_at
|
|
])
|
|
|> validate_required([
|
|
:device_id,
|
|
:mac_address,
|
|
:last_seen_at
|
|
])
|
|
|> foreign_key_constraint(:device_id)
|
|
|> foreign_key_constraint(:interface_id)
|
|
|> unique_constraint([:device_id, :mac_address, :vlan_id])
|
|
end
|
|
end
|