We've always said that SDN Controllers are "Protocol-less", they don't need to know the packet's encoding to switch it or, controllers can be routed packets by the IP Address and the IP Address used to be encoded on the header of the packet.
So how does the controller extract the IP address from the header while it's protocol-less?