Обмен данными поверх ethernet(mac2mac), как реализовать?
Прямо из репозитория самого автора Linux:
https://github.com/torvalds/linux/blob/master/net/...
Кстати, там в комментариях дата, этому коду 29 лет, а он до сих пор актуален.
Ещё для примера можно это глянуть:
https://github.com/iputils/iputils/blob/master/arping.c

и какие вообще есть API для этих целейВероятно, никаких.
API? На C? На уровне пакетов ethernet? Ну, какие-то либы наверняка  найдутся, позволяющие формировать пакеты, но я бы на месте твоего препода добавил условие "и без использования библиотек". 
Берется RFC, читается, формируется пакет вручную и вручную же отправляется в сетевой стек на нужном уровне.