Skip to content

Commit

Permalink
Add housekeeping() method to apps
Browse files Browse the repository at this point in the history
Move code not related to processing of packets from the input link to
the new method.
  • Loading branch information
alexandergall committed Mar 14, 2019
1 parent 1cfadb3 commit 5fb9816
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 22 deletions.
10 changes: 6 additions & 4 deletions src/apps/ipv4/arp.lua
Original file line number Diff line number Diff line change
Expand Up @@ -221,8 +221,6 @@ function ARP:push()
local isouth, osouth = self.input.south, self.output.south
local inorth, onorth = self.input.north, self.output.north

self:maybe_send_arp_request(osouth)

for _ = 1, link.nreadable(isouth) do
local p = receive(isouth)
if p.length < ether_header_len then
Expand Down Expand Up @@ -269,6 +267,10 @@ function ARP:push()
end
end

function ARP:housekeeping ()
self:maybe_send_arp_request(self.output.south)
end

function selftest()
print('selftest: arp')

Expand All @@ -278,8 +280,8 @@ function selftest()
arp.input = { south=link.new('south in'), north=link.new('north in') }
arp.output = { south=link.new('south out'), north=link.new('north out') }

-- After first push, ARP should have sent out request.
arp:push()
-- After first housekeeping, ARP should have sent out request.
arp:housekeeping()
assert(link.nreadable(arp.output.south) == 1)
assert(link.nreadable(arp.output.north) == 0)
local req = link.receive(arp.output.south)
Expand Down
6 changes: 4 additions & 2 deletions src/apps/ipv4/fragment.lua
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,6 @@ function Fragmenter:push ()
local input, output = self.input.input, self.output.output
local max_length = self.mtu + ether_header_len

self.outgoing_ipv4_fragments_alarm:check()

for _ = 1, link.nreadable(input) do
local pkt = link.receive(input)
local h = ffi.cast(ether_ipv4_header_ptr_t, pkt.data)
Expand All @@ -196,6 +194,10 @@ function Fragmenter:push ()
end
end

function Fragmenter:housekeeping ()
self.outgoing_ipv4_fragments_alarm:check()
end

function selftest()
print("selftest: apps.ipv4.fragment")

Expand Down
6 changes: 4 additions & 2 deletions src/apps/ipv4/reassemble.lua
Original file line number Diff line number Diff line change
Expand Up @@ -301,8 +301,6 @@ end
function Reassembler:push ()
local input, output = self.input.input, self.output.output

self.incoming_ipv4_fragments_alarm:check()

for _ = 1, link.nreadable(input) do
local pkt = link.receive(input)
local h = ffi.cast(ether_ipv4_header_ptr_t, pkt.data)
Expand All @@ -327,6 +325,10 @@ function Reassembler:push ()
packet.free(pkt)
end
end
end

function Reassembler:housekeeping ()
self.incoming_ipv4_fragments_alarm:check()

if self.next_counter_update < engine.now() then
-- Update counters every second, but add a bit of jitter to smooth
Expand Down
6 changes: 4 additions & 2 deletions src/apps/ipv6/fragment.lua
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,6 @@ function Fragmenter:push ()
local input, output = self.input.input, self.output.output
local max_length = self.mtu + ether_header_len

self.outgoing_ipv6_fragments_alarm:check()

for _ = 1, link.nreadable(input) do
local pkt = link.receive(input)
local h = ffi.cast(ether_ipv6_header_ptr_t, pkt.data)
Expand All @@ -198,6 +196,10 @@ function Fragmenter:push ()
end
end

function Fragmenter:housekeeping ()
self.outgoing_ipv6_fragments_alarm:check()
end

function selftest()
print("selftest: apps.ipv6.fragment")

Expand Down
12 changes: 7 additions & 5 deletions src/apps/ipv6/nd_light.lua
Original file line number Diff line number Diff line change
Expand Up @@ -334,11 +334,6 @@ local function from_south (self, p)
end

function nd_light:push ()
if self._next_hop.nsent == 0 and self._eth_header == nil then
-- Kick off address resolution
self._next_hop.timer_cb()
end

local cache = self._cache
local l_in = self.input.south
local l_out = self.output.north
Expand Down Expand Up @@ -382,6 +377,13 @@ function nd_light:push ()
end
end

function nd_light:housekeeping ()
if self._next_hop.nsent == 0 and self._eth_header == nil then
-- Kick off address resolution
self._next_hop.timer_cb()
end
end

-- Free static packets on `stop'.
function nd_light:stop ()
packet.free(self._next_hop.packet)
Expand Down
6 changes: 4 additions & 2 deletions src/apps/ipv6/reassemble.lua
Original file line number Diff line number Diff line change
Expand Up @@ -302,8 +302,6 @@ end
function Reassembler:push ()
local input, output = self.input.input, self.output.output

self.incoming_ipv6_fragments_alarm:check()

for _ = 1, link.nreadable(input) do
local pkt = link.receive(input)
local h = ffi.cast(ether_ipv6_header_ptr_t, pkt.data)
Expand All @@ -327,6 +325,10 @@ function Reassembler:push ()
link.transmit(output, pkt)
end
end
end

function Reassembler:housekeeping ()
self.incoming_ipv6_fragments_alarm:check()

if self.next_counter_update < engine.now() then
-- Update counters every second, but add a bit of jitter to smooth
Expand Down
12 changes: 7 additions & 5 deletions src/apps/lwaftr/ndp.lua
Original file line number Diff line number Diff line change
Expand Up @@ -442,11 +442,6 @@ function NDP:push()
local isouth, osouth = self.input.south, self.output.south
local inorth, onorth = self.input.north, self.output.north

-- TODO: do unsolicited neighbor advertisement on start and on
-- configuration reloads?
-- This would be an optimization, not a correctness issue
self:maybe_send_ns_request(osouth)

for _ = 1, link.nreadable(isouth) do
local p = receive(isouth)
if is_ndp(p) then
Expand Down Expand Up @@ -475,6 +470,13 @@ function NDP:push()
end
end

function NDP:housekeeping()
-- TODO: do unsolicited neighbor advertisement on start and on
-- configuration reloads?
-- This would be an optimization, not a correctness issue
self:maybe_send_ns_request(self.output.south)
end

function selftest()
print("selftest: ndp")

Expand Down

0 comments on commit 5fb9816

Please sign in to comment.