79 lines
1.5 KiB
C
79 lines
1.5 KiB
C
/*
|
|
* Copyright (c) 2016 Intel Corporation.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <zephyr/logging/log.h>
|
|
LOG_MODULE_REGISTER(net_l2_dummy, LOG_LEVEL_NONE);
|
|
|
|
#include <zephyr/net/net_core.h>
|
|
#include <zephyr/net/net_l2.h>
|
|
#include <zephyr/net/net_if.h>
|
|
#include <zephyr/net/net_pkt.h>
|
|
|
|
#include <zephyr/net/dummy.h>
|
|
|
|
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);
|