Junos Interfaces and Protocols: Now I get it
My Junos versus Cisco IOS: Explicit versus Implicit received a huge amount of helpful comments, some of them slightly philosophical, others highly practical – from using interfaces all combined with interface disable in routing protocol configuration, to using configuration groups (more about that fantastic concept in another post).
However, understanding what’s going on is not the same as being able to explain it in one sentence ... and Dan (@jonahsfo) Backman beautifully nailed that one.
We had a lengthy chat focused on Junos MPLS implementation (yet another blog post) and stumbled across my interfaces-and-protocols confusion. He started explaining how the interface configuration actually ties in with Ethertypes accepted through that interface and per-protocol forwarding tables (actually Radix trees) and then offered the following explanation ...
You know, you configure the data-plane functionality within the interfaces and control-plane functionality within the protocols.
... and all of a sudden, it all made perfect sense:
- Control plane protocols using in-band communication can receive network-layer packets only if the data plane receives them, figures out they were sent to the local node, and forwards them to the control plane. Explains why you need to configure family iso on an interface before you add that same interface to the IS-IS routing process.
- Control plane functionality makes no sense if there’s no data plane forwarding structure to receive the results. Explains why LDP refuses to start on an interface lacking family mpls configuration.
If only someone would take those wise words and add them to Junos documentation ... adding proper error messaging when there’s a control/data plane configuration mismatch would be almost too good to hope for ;)
Disclosure
The only reason I learned the marginal bits & pieces I know about Junos is because Juniper kindly provided me with free access to Junosphere environment (thanks to @abnerg) ... but I was not compensated for my blog posts, or asked to write about Junos or Junosphere.
Wait until you get to firewalls, policy-statements :)
Also, I think that your remarks regarding error messaging and/or junos documentation are not totally fair. JunOS documentation (depends what you are reading) actually tell you (it's junos basics) that at interface level you have to enable 'things' that you want the interfaces to understand (like packet headers, therefore families). Once you know that everything works with this mindset it is really just a matter of knowing some basic troubleshooting commands like:
show <protocol> interfaces/adjacency/summary
One bit that might confusing (coming from IOS) is the rsvp vs mpls (what goes where), checking routing tables (since you now have all the inet.'s and mpls.'s.
Anyway... has been a fun ride since I embraced both and I clearly have a preference. </protocol>