Page MenuHomeFreeBSD

if_fwsubr: remove ARP target hardware address trimming
ClosedPublic

Authored by guest-seuros on Wed, Jun 17, 5:14 PM.
Referenced Files
F161251286: D57617.id179937.diff
Thu, Jul 2, 3:39 AM
F161250671: D57617.id179937.diff
Thu, Jul 2, 3:32 AM
F161222526: D57617.diff
Wed, Jul 1, 8:48 PM
F161212965: D57617.id180261.diff
Wed, Jul 1, 6:03 PM
F161212802: D57617.id180261.diff
Wed, Jul 1, 6:00 PM
Unknown Object (File)
Tue, Jun 30, 3:35 AM
Unknown Object (File)
Tue, Jun 30, 3:31 AM
Unknown Object (File)
Sat, Jun 27, 11:03 PM

Details

Summary

Per RFC 2734 section 5, the 1394 ARP packet is a fixed 32-octet structure
with no target hardware address field.

Test Plan

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 73934
Build 70817: arc lint + arc unit

Event Timeline

guest-seuros added reviewers: adrian, imp.
guest-seuros added projects: firewire, drivers.

wait, did this change at some point?

No, I just necromanced into code that was idle for 22 years. The AF_ARP case was copied from if_ethersubr.c when @dfr added if_fwsubr.c in 2004.

The trimming may have actually been correct at the time. But if_ether.c has had 1.2k commits since then, and nobody was retesting FireWire ARP.

This is not something that made networking unusable, I just have verbose and debug logging enabled, which is how I noticed it.

ngie added subscribers: bz, ngie.

@bz, @glebius, @melifaro, etc: can you help confirm that this is change is correct?

It seems like it's the right thing to do to my untrained eye, but I don't know all of the [current] nuances of our networking stack.

Some other research I just did.

Linux implements ARP over IEEE1394 like this:

NetBSD implements ARP over IEEE1394 like this:

My guess is that OSX would be the gold standard implementation of IEEE1394 though.

The latest version (before they completely pulled IEEE1394 support from their products) seems to support either specifying a target address, or broadcasting ARP packets to entire (networks/fabrics/etc? not sure the nomenclature):
https://github.com/apple-oss-distributions/IOFireWireIP/blob/cff24dfbfc7170b3af0c1d3b9894f3eab2365551/KernelSource/BSD/if_firewire.cpp#L192-L196

Were there any RFCs that superseded the one referenced?

Were there any RFCs that superseded the one referenced?

No, if it were, it would be mentioned, like this one:
https://datatracker.ietf.org/doc/html/rfc2460 (look for "Obsoleted by" or "Updated by")

Unfortunately, I don't know much about ARP implementation on anything other than ethernet.

Were there any RFCs that superseded the one referenced?

No, if it were, it would be mentioned, like this one:
https://datatracker.ietf.org/doc/html/rfc2460 (look for "Obsoleted by" or "Updated by")

Yeah 👍.

Unfortunately, I don't know much about ARP implementation on anything other than ethernet.

I'll look at the code again (FreeBSD with this driver and with another driver, vs the OSX implementation). There might be a nuance that I'm missing..

Did you check interoperability vs OS X or Linux? If this change is correct then firewire interface was not functional for many years and nobody noticed that. This raises question on whether it needs to be kept in FreeBSD at all.

AFAIK, the only real firewire application today is dumping data from old but expensive professional video cameras.

This code originates from the very beginning of firewire and it is not a copy from ether_output().

Did you check interoperability vs OS X or Linux? If this change is correct then firewire interface was not functional for many years and nobody noticed that. This raises question on whether it needs to be kept in FreeBSD at all.

AFAIK, the only real firewire application today is dumping data from old but expensive professional video cameras.

Connecting OS X and Linux + verbose mode is what showed the error. The driver did work for file transfer without this fix.

Firewire is not used only in cameras. Industrial machines used it a transport layer, they still depend on an OEL version of MACOS. There are also old audio hardware that can be controlled via firewire (The racks don't have to be replaced every year)

ok, if you have tested it between macosx and linux and freebsd then that's good enough for me.

(Hopefully next week i'll be in a situation to test firewire again.)

This revision is now accepted and ready to land.Sun, Jun 21, 8:10 PM