So far as I can tell, there is no "Next Protocol" ID at the Ethernet / data link layer. Nor do IP packets seem to contain any magic numbers for identification purposes.
Does the OS bind each link to a single specific network / internet layer protocol? Or does it optimistically try to parse each frame as an IP packet? (e.g. checking to see if the bits that would be the destination IP field match an IP address being listened for) Or is there something else going on?
Or to look at it differently, how would you create an alternative to IP, and get the OS to distinguish them?