Как программно создать несколько сетевых интерфейсов?
Как я понял вам хочется делать тоже, что можно сделать через ifconfig, только без ifconfig - напрямую пиная систему. (Вы уверены что вам это реально нужно?)
Собственно для этого есть libnetlink (которую использует iproute), которая может делать вообще все, что система вообще умеет  по части сетевых интерфейсов.
Рекомендую взять и посмотреть исходники ifconfig, и в отладчике посмотреть как она делает то, что вам нужно т.к. документация к libnetlink, как я считаю, хреновая и не полная (мягко говоря там много чего из того, что используется в ifconfig вообще не описано) и, как я считаю, API там очень не удобный.
Ну например https://linuxconfig.org/configuring-virtual-networ...
И вообще поиск по linux virtual ethernet даёт ответ за 5 секунд