1ceed73a2SSubash Abhinov Kasiviswanathan /* Copyright (c) 2013-2014, 2016-2017 The Linux Foundation. All rights reserved. 2ceed73a2SSubash Abhinov Kasiviswanathan * 3ceed73a2SSubash Abhinov Kasiviswanathan * This program is free software; you can redistribute it and/or modify 4ceed73a2SSubash Abhinov Kasiviswanathan * it under the terms of the GNU General Public License version 2 and 5ceed73a2SSubash Abhinov Kasiviswanathan * only version 2 as published by the Free Software Foundation. 6ceed73a2SSubash Abhinov Kasiviswanathan * 7ceed73a2SSubash Abhinov Kasiviswanathan * This program is distributed in the hope that it will be useful, 8ceed73a2SSubash Abhinov Kasiviswanathan * but WITHOUT ANY WARRANTY; without even the implied warranty of 9ceed73a2SSubash Abhinov Kasiviswanathan * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10ceed73a2SSubash Abhinov Kasiviswanathan * GNU General Public License for more details. 11ceed73a2SSubash Abhinov Kasiviswanathan * 12ceed73a2SSubash Abhinov Kasiviswanathan * RMNET Data configuration engine 13ceed73a2SSubash Abhinov Kasiviswanathan * 14ceed73a2SSubash Abhinov Kasiviswanathan */ 15ceed73a2SSubash Abhinov Kasiviswanathan 16ceed73a2SSubash Abhinov Kasiviswanathan #include <linux/skbuff.h> 17ceed73a2SSubash Abhinov Kasiviswanathan 18ceed73a2SSubash Abhinov Kasiviswanathan #ifndef _RMNET_CONFIG_H_ 19ceed73a2SSubash Abhinov Kasiviswanathan #define _RMNET_CONFIG_H_ 20ceed73a2SSubash Abhinov Kasiviswanathan 21ceed73a2SSubash Abhinov Kasiviswanathan #define RMNET_MAX_LOGICAL_EP 255 22ceed73a2SSubash Abhinov Kasiviswanathan 23ceed73a2SSubash Abhinov Kasiviswanathan struct rmnet_endpoint { 24ceed73a2SSubash Abhinov Kasiviswanathan u8 mux_id; 25ceed73a2SSubash Abhinov Kasiviswanathan struct net_device *egress_dev; 263352e6c4SSubash Abhinov Kasiviswanathan struct hlist_node hlnode; 27ceed73a2SSubash Abhinov Kasiviswanathan }; 28ceed73a2SSubash Abhinov Kasiviswanathan 29ceed73a2SSubash Abhinov Kasiviswanathan /* One instance of this structure is instantiated for each real_dev associated 30ceed73a2SSubash Abhinov Kasiviswanathan * with rmnet. 31ceed73a2SSubash Abhinov Kasiviswanathan */ 32b665f4f8SSubash Abhinov Kasiviswanathan struct rmnet_port { 33ceed73a2SSubash Abhinov Kasiviswanathan struct net_device *dev; 34ceed73a2SSubash Abhinov Kasiviswanathan u32 ingress_data_format; 35ceed73a2SSubash Abhinov Kasiviswanathan u32 egress_data_format; 36ceed73a2SSubash Abhinov Kasiviswanathan u8 nr_rmnet_devs; 3791489632SSubash Abhinov Kasiviswanathan u8 rmnet_mode; 383352e6c4SSubash Abhinov Kasiviswanathan struct hlist_head muxed_ep[RMNET_MAX_LOGICAL_EP]; 3960d58f97SSubash Abhinov Kasiviswanathan struct net_device *bridge_ep; 40ceed73a2SSubash Abhinov Kasiviswanathan }; 41ceed73a2SSubash Abhinov Kasiviswanathan 42ceed73a2SSubash Abhinov Kasiviswanathan extern struct rtnl_link_ops rmnet_link_ops; 43ceed73a2SSubash Abhinov Kasiviswanathan 44192c4b5dSSubash Abhinov Kasiviswanathan struct rmnet_vnd_stats { 45192c4b5dSSubash Abhinov Kasiviswanathan u64 rx_pkts; 46192c4b5dSSubash Abhinov Kasiviswanathan u64 rx_bytes; 47192c4b5dSSubash Abhinov Kasiviswanathan u64 tx_pkts; 48192c4b5dSSubash Abhinov Kasiviswanathan u64 tx_bytes; 49192c4b5dSSubash Abhinov Kasiviswanathan u32 tx_drops; 50192c4b5dSSubash Abhinov Kasiviswanathan }; 51192c4b5dSSubash Abhinov Kasiviswanathan 52192c4b5dSSubash Abhinov Kasiviswanathan struct rmnet_pcpu_stats { 53192c4b5dSSubash Abhinov Kasiviswanathan struct rmnet_vnd_stats stats; 54192c4b5dSSubash Abhinov Kasiviswanathan struct u64_stats_sync syncp; 55192c4b5dSSubash Abhinov Kasiviswanathan }; 56192c4b5dSSubash Abhinov Kasiviswanathan 57ceed73a2SSubash Abhinov Kasiviswanathan struct rmnet_priv { 58ceed73a2SSubash Abhinov Kasiviswanathan u8 mux_id; 59b752eff5SSubash Abhinov Kasiviswanathan struct net_device *real_dev; 60192c4b5dSSubash Abhinov Kasiviswanathan struct rmnet_pcpu_stats __percpu *pcpu_stats; 61ceed73a2SSubash Abhinov Kasiviswanathan }; 62ceed73a2SSubash Abhinov Kasiviswanathan 63b665f4f8SSubash Abhinov Kasiviswanathan struct rmnet_port *rmnet_get_port(struct net_device *real_dev); 643352e6c4SSubash Abhinov Kasiviswanathan struct rmnet_endpoint *rmnet_get_endpoint(struct rmnet_port *port, u8 mux_id); 6560d58f97SSubash Abhinov Kasiviswanathan int rmnet_add_bridge(struct net_device *rmnet_dev, 6660d58f97SSubash Abhinov Kasiviswanathan struct net_device *slave_dev, 6760d58f97SSubash Abhinov Kasiviswanathan struct netlink_ext_ack *extack); 6860d58f97SSubash Abhinov Kasiviswanathan int rmnet_del_bridge(struct net_device *rmnet_dev, 6960d58f97SSubash Abhinov Kasiviswanathan struct net_device *slave_dev); 70ceed73a2SSubash Abhinov Kasiviswanathan #endif /* _RMNET_CONFIG_H_ */ 71