/* * Copyright (c) 2016 Intel Corporation. * * SPDX-License-Identifier: Apache-2.0 */ #include LOG_MODULE_REGISTER(net_l2_dummy, LOG_LEVEL_NONE); #include #include #include #include #include static inline enum net_verdict dummy_recv(struct net_if *iface, struct net_pkt *pkt) { const struct dummy_api *api = net_if_get_device(iface)->api; if (api == NULL) { return NET_DROP; } if (api->recv == NULL) { return NET_CONTINUE; } return api->recv(iface, pkt); } static inline int dummy_send(struct net_if *iface, struct net_pkt *pkt) { const struct dummy_api *api = net_if_get_device(iface)->api; int ret; if (!api) { return -ENOENT; } ret = net_l2_send(api->send, net_if_get_device(iface), iface, pkt); if (!ret) { ret = net_pkt_get_len(pkt); net_pkt_unref(pkt); } return ret; } static inline int dummy_enable(struct net_if *iface, bool state) { int ret = 0; const struct dummy_api *api = net_if_get_device(iface)->api; if (!api) { return -ENOENT; } if (!state) { if (api->stop) { ret = api->stop(net_if_get_device(iface)); } } else { if (api->start) { ret = api->start(net_if_get_device(iface)); } } return ret; } static enum net_l2_flags dummy_flags(struct net_if *iface) { return NET_L2_MULTICAST; } NET_L2_INIT(DUMMY_L2, dummy_recv, dummy_send, dummy_enable, dummy_flags);