zephyr/subsys/net/l2/canbus/canbus_raw.c

50 lines
1.1 KiB
C

/*
* Copyright (c) 2019 Intel Corporation.
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <logging/log.h>
LOG_MODULE_REGISTER(net_l2_canbus, LOG_LEVEL_NONE);
#include <net/net_core.h>
#include <net/net_l2.h>
#include <net/net_if.h>
#include <net/net_pkt.h>
#include <net/socket_can.h>
static inline enum net_verdict canbus_recv(struct net_if *iface,
struct net_pkt *pkt)
{
net_pkt_lladdr_src(pkt)->addr = NULL;
net_pkt_lladdr_src(pkt)->len = 0U;
net_pkt_lladdr_src(pkt)->type = NET_LINK_CANBUS_RAW;
net_pkt_lladdr_dst(pkt)->addr = NULL;
net_pkt_lladdr_dst(pkt)->len = 0U;
net_pkt_lladdr_dst(pkt)->type = NET_LINK_CANBUS_RAW;
net_pkt_set_family(pkt, AF_CAN);
return NET_CONTINUE;
}
static inline int canbus_send(struct net_if *iface, struct net_pkt *pkt)
{
const struct canbus_api *api = net_if_get_device(iface)->driver_api;
int ret;
if (!api) {
return -ENOENT;
}
ret = api->send(net_if_get_device(iface), pkt);
if (!ret) {
ret = net_pkt_get_len(pkt);
net_pkt_unref(pkt);
}
return ret;
}
NET_L2_INIT(CANBUS_RAW_L2, canbus_recv, canbus_send, NULL, NULL);