37#include <linux/version.h>
38#include <linux/netdevice.h>
39#include <linux/etherdevice.h>
53#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31)
84 memset(&dbg->
stats, 0,
sizeof(
struct net_device_stats));
87 alloc_netdev(
sizeof(
ec_debug_t *), name, ether_setup))) {
89 " for debug object!\n");
94#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 31)
120 free_netdev(dbg->
dev);
129 const struct net_device *net_dev
137#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
138 eth_hw_addr_set(dbg->
dev, net_dev->dev_addr);
140 memcpy(dbg->
dev->dev_addr, net_dev->dev_addr, ETH_ALEN);
144 if ((result = register_netdev(dbg->
dev))) {
146 " error %i\n", result);
163 unregister_netdev(dbg->
dev);
183 if (!(skb = dev_alloc_skb(size))) {
184 dbg->
stats.rx_dropped++;
189 memcpy(skb_put(skb, size), data, size);
192 dbg->
stats.rx_packets++;
193 dbg->
stats.rx_bytes += size;
197 skb->protocol = eth_type_trans(skb, dbg->
dev);
198 skb->ip_summed = CHECKSUM_UNNECESSARY;
211 struct net_device *dev
228 struct net_device *dev
246 struct net_device *dev
252 dbg->
stats.tx_dropped++;
263 struct net_device *dev
static const struct net_device_ops ec_dbg_netdev_ops
Device operations for debug interfaces.
int ec_dbgdev_open(struct net_device *)
Opens the virtual network device.
void ec_debug_clear(ec_debug_t *dbg)
Debug interface destructor.
void ec_debug_unregister(ec_debug_t *dbg)
Unregister debug interface.
int ec_dbgdev_stop(struct net_device *)
Stops the virtual network device.
void ec_debug_register(ec_debug_t *dbg, const struct net_device *net_dev)
Register debug interface.
int ec_dbgdev_tx(struct sk_buff *, struct net_device *)
Transmits data via the virtual network device.
int ec_debug_init(ec_debug_t *dbg, ec_device_t *device, const char *name)
Debug interface constructor.
struct net_device_stats * ec_dbgdev_stats(struct net_device *)
Gets statistics about the virtual network device.
void ec_debug_send(ec_debug_t *dbg, const uint8_t *data, size_t size)
Sends frame data to the interface.
Network interface for debugging purposes.
Global definitions and macros.
EtherCAT master structure.
#define EC_MASTER_INFO(master, fmt, args...)
Convenience macro for printing master-specific information to syslog.
#define EC_MASTER_ERR(master, fmt, args...)
Convenience macro for printing master-specific errors to syslog.
#define EC_MASTER_WARN(master, fmt, args...)
Convenience macro for printing master-specific warnings to syslog.
Debugging network interface.
struct net_device * dev
net_device for virtual ethernet device
ec_device_t * device
Parent device.
uint8_t opened
net_device is opened
struct net_device_stats stats
device statistics
uint8_t registered
net_device is opened
ec_master_t * master
EtherCAT master.