Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /* Copyright (c) 2013-2014, 2016-2018, 2021 The Linux Foundation.
0003  * All rights reserved.
0004  *
0005  * RMNET Data configuration engine
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 /* One instance of this structure is instantiated for each real_dev associated
0023  * with rmnet.
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 /* _RMNET_CONFIG_H_ */