If family mpls is enough to enable mpls encapsulation on the interface, why do I also need "protocols mpls interface x" when creating RSVP LSPs. I tried just family mpls on the interface and a simple "protocols mpls label-switched-path...", but it doesn't work without "protocols mpls interface x". I noticed that it affects the TED entry so a CSPF calculation fails. When I turn off CSPF, it results in a label allocation failure.
Why does a martini circuit and a CCC require "protocols mpls"? You get a commit error if you don't have "protocols mpls" configured. But an L3VPN works fine without it.
A JNCIE once told me that "family mpls" allows for the acceptance of etherype 0x8847 and 0x8848 on the interface, and "protocols mpls interface" enables mpls for that interface. That sounded reasonable, but it wasn't accurate based on my lab testing. I just want to know what it actually does and why is the behavior different across MPLS transport and VPNs.