Currently, whatever the encapsulation used, tunnel interfaces are called tunX. This is problematic.
For all other interfaces, the name can be used to figure out the python interface class that should be used to manipulate the underlying Linux interface.
GRE and SIT interfaces are not the same and are not built the same way but both are called tunX.
Having a unique name prefix per interface type is a good feature to have as it make the code generic and consistent.
I would therefore suggest that tunnels should have different names for different interfaces, removing the need for the “encapsulation” keyword.
The first step could be to not allow the creation of tunnel interfaces with the name tun and infer the encapsulation from the name, with perhaps a view down the line to move each tunnel type to a unique "interface" section.