0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/skbuff.h>
0009 #include <net/gro_cells.h>
0010
0011 #ifndef _RMNET_CONFIG_H_
0012 #define _RMNET_CONFIG_H_
0013
0014 #define RMNET_MAX_LOGICAL_EP 255
0015
0016 struct rmnet_endpoint {
0017 u8 mux_id;
0018 struct net_device *egress_dev;
0019 struct hlist_node hlnode;
0020 };
0021
0022
0023
0024
0025 struct rmnet_port {
0026 struct net_device *dev;
0027 u32 data_format;
0028 u8 nr_rmnet_devs;
0029 u8 rmnet_mode;
0030 struct hlist_head muxed_ep[RMNET_MAX_LOGICAL_EP];
0031 struct net_device *bridge_ep;
0032 struct net_device *rmnet_dev;
0033 };
0034
0035 extern struct rtnl_link_ops rmnet_link_ops;
0036
0037 struct rmnet_vnd_stats {
0038 u64 rx_pkts;
0039 u64 rx_bytes;
0040 u64 tx_pkts;
0041 u64 tx_bytes;
0042 u32 tx_drops;
0043 };
0044
0045 struct rmnet_pcpu_stats {
0046 struct rmnet_vnd_stats stats;
0047 struct u64_stats_sync syncp;
0048 };
0049
0050 struct rmnet_priv_stats {
0051 u64 csum_ok;
0052 u64 csum_ip4_header_bad;
0053 u64 csum_valid_unset;
0054 u64 csum_validation_failed;
0055 u64 csum_err_bad_buffer;
0056 u64 csum_err_invalid_ip_version;
0057 u64 csum_err_invalid_transport;
0058 u64 csum_fragmented_pkt;
0059 u64 csum_skipped;
0060 u64 csum_sw;
0061 u64 csum_hw;
0062 };
0063
0064 struct rmnet_priv {
0065 u8 mux_id;
0066 struct net_device *real_dev;
0067 struct rmnet_pcpu_stats __percpu *pcpu_stats;
0068 struct gro_cells gro_cells;
0069 struct rmnet_priv_stats stats;
0070 };
0071
0072 struct rmnet_port *rmnet_get_port_rcu(struct net_device *real_dev);
0073 struct rmnet_endpoint *rmnet_get_endpoint(struct rmnet_port *port, u8 mux_id);
0074 int rmnet_add_bridge(struct net_device *rmnet_dev,
0075 struct net_device *slave_dev,
0076 struct netlink_ext_ack *extack);
0077 int rmnet_del_bridge(struct net_device *rmnet_dev,
0078 struct net_device *slave_dev);
0079 struct rmnet_port*
0080 rmnet_get_port_rtnl(const struct net_device *real_dev);
0081 #endif