diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a50544c..4f68530 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,19 +15,20 @@ jobs: name: Test (OTP ${{ matrix.otp }} / Elixir ${{ matrix.elixir }}) strategy: matrix: - elixir: ["1.18", "1.17", "1.16", "1.15", "1.14"] - otp: ["27", "26", "25", "24"] + elixir: ["1.19", "1.18", "1.17", "1.16", "1.15"] + otp: ["28", "27", "26", "25", "24"] exclude: - - { otp: "25", elixir: "1.18" } + - { otp: "24", elixir: "1.19" } - { otp: "24", elixir: "1.18" } - { otp: "24", elixir: "1.17" } + - { otp: "25", elixir: "1.19" } - { otp: "27", elixir: "1.16" } - - { otp: "22", elixir: "1.16" } - { otp: "27", elixir: "1.15" } - - { otp: "27", elixir: "1.14" } - - { otp: "26", elixir: "1.14" } + - { otp: "28", elixir: "1.17" } + - { otp: "28", elixir: "1.16" } + - { otp: "28", elixir: "1.15" } steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: erlef/setup-beam@v1 with: otp-version: ${{ matrix.otp }} @@ -38,19 +39,15 @@ jobs: lint: runs-on: ubuntu-latest name: Linting - strategy: - matrix: - elixir: ["1.18"] - otp: ["27"] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - uses: erlef/setup-beam@v1 id: beam with: - otp-version: ${{ matrix.otp }} - elixir-version: ${{ matrix.elixir }} + version-file: .tool-versions + version-type: strict - name: PLT cache - uses: actions/cache@v4 + uses: actions/cache@v5 with: key: | ${{ runner.os }}-${{ steps.beam.outputs.elixir-version }}-${{ steps.beam.outputs.otp-version }}-plt diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..cdd7ae1 --- /dev/null +++ b/.tool-versions @@ -0,0 +1,2 @@ +erlang 28.3 +elixir 1.19.4-otp-28 diff --git a/lib/bgp/message/open.ex b/lib/bgp/message/open.ex index 525b444..8e822a8 100644 --- a/lib/bgp/message/open.ex +++ b/lib/bgp/message/open.ex @@ -32,7 +32,7 @@ defmodule BGP.Message.OPEN do def decode( <>, - session + %Session{} = session ) do decode_open( version, @@ -40,7 +40,7 @@ defmodule BGP.Message.OPEN do hold_time, bgp_id, params, - %Session{session | extended_optional_parameters: true} + %{session | extended_optional_parameters: true} ) end @@ -103,20 +103,20 @@ defmodule BGP.Message.OPEN do defp decode_parameters( <<2::8, length::16, parameter::binary-size(length), rest::binary>>, - msg, + %__MODULE__{} = msg, %Session{extended_optional_parameters: true} = session ) do {capabilities, session} = Capabilities.decode(parameter, session) - decode_parameters(rest, %__MODULE__{msg | capabilities: capabilities}, session) + decode_parameters(rest, %{msg | capabilities: capabilities}, session) end defp decode_parameters( <<2::8, length::8, parameter::binary-size(length), rest::binary>>, - msg, + %__MODULE__{} = msg, session ) do {capabilities, session} = Capabilities.decode(parameter, session) - decode_parameters(rest, %__MODULE__{msg | capabilities: capabilities}, session) + decode_parameters(rest, %{msg | capabilities: capabilities}, session) end @impl Encoder diff --git a/lib/bgp/message/open/capabilities.ex b/lib/bgp/message/open/capabilities.ex index 8ca2661..f95ab2b 100644 --- a/lib/bgp/message/open/capabilities.ex +++ b/lib/bgp/message/open/capabilities.ex @@ -47,35 +47,40 @@ defmodule BGP.Message.OPEN.Capabilities do decode_capabilities(rest, capabilities, session) end - defp decode_capability(1, <>, capabilities, session) do + defp decode_capability( + 1, + <>, + %__MODULE__{} = capabilities, + session + ) do with {:ok, afi} <- AFN.decode_afi(afi), {:ok, safi} <- AFN.decode_safi(safi) do - {%__MODULE__{capabilities | multi_protocol: {afi, safi}}, session} + {%{capabilities | multi_protocol: {afi, safi}}, session} else :error -> raise NOTIFICATION, code: :open_message end end - defp decode_capability(2, <<>>, capabilities, session), - do: {%__MODULE__{capabilities | route_refresh: true}, session} + defp decode_capability(2, <<>>, %__MODULE__{} = capabilities, session), + do: {%{capabilities | route_refresh: true}, session} - defp decode_capability(6, <<>>, capabilities, session), - do: {%__MODULE__{capabilities | extended_message: true}, session} + defp decode_capability(6, <<>>, %__MODULE__{} = capabilities, session), + do: {%{capabilities | extended_message: true}, session} defp decode_capability( 64, <>, - capabilities, + %__MODULE__{} = capabilities, session ), do: - {%__MODULE__{ + {%{ capabilities | graceful_restart: {restarted == 1, time, decode_afs(afs, [])} }, session} - defp decode_capability(65, <>, capabilities, session) do + defp decode_capability(65, <>, %__MODULE__{} = capabilities, %Session{} = session) do unless asn >= 1 and asn <= @asn_four_octets_max do raise NOTIFICATION, code: :open_message, @@ -83,12 +88,12 @@ defmodule BGP.Message.OPEN.Capabilities do data: <> end - {%__MODULE__{capabilities | four_octets_asn: true}, - %Session{session | four_octets: true, ibgp: asn == session.asn}} + {%{capabilities | four_octets_asn: true}, + %{session | four_octets: true, ibgp: asn == session.asn}} end - defp decode_capability(70, <<>>, capabilities, session), - do: {%__MODULE__{capabilities | enanched_route_refresh: true}, session} + defp decode_capability(70, <<>>, %__MODULE__{} = capabilities, session), + do: {%{capabilities | enanched_route_refresh: true}, session} defp decode_capability(_code, _data, _capabilities, _session) do raise NOTIFICATION, code: :open_message