Loading include/uapi/linux/rmnet_data.h +25 −2 Original line number Diff line number Diff line Loading @@ -66,6 +66,11 @@ struct rmnet_nl_msg_s { uint32_t id; uint8_t vnd_name[RMNET_MAX_STR_LEN]; } vnd; struct { uint32_t id; uint32_t map_flow_id; uint32_t tc_flow_id; } flow_control; }; }; Loading Loading @@ -186,7 +191,24 @@ enum rmnet_netlink_message_types_e { * Args: int32_t node number * Returns: status code */ RMNET_NETLINK_FREE_VND RMNET_NETLINK_FREE_VND, /* * RMNET_NETLINK_ADD_VND_TC_FLOW - Add flow control handle on VND * Args: int32_t node number * uint32_t MAP Flow Handle * uint32_t TC Flow Handle * Returns: status code */ RMNET_NETLINK_ADD_VND_TC_FLOW, /* * RMNET_NETLINK_DEL_VND_TC_FLOW - Removes flow control handle on VND * Args: int32_t node number * uint32_t MAP Flow Handle * Returns: status code */ RMNET_NETLINK_DEL_VND_TC_FLOW }; enum rmnet_config_endpoint_modes_e { Loading @@ -205,7 +227,8 @@ enum rmnet_config_return_codes_e { RMNET_CONFIG_INVALID_REQUEST, RMNET_CONFIG_NO_SUCH_DEVICE, RMNET_CONFIG_BAD_ARGUMENTS, RMNET_CONFIG_BAD_EGRESS_DEVICE RMNET_CONFIG_BAD_EGRESS_DEVICE, RMNET_CONFIG_TC_HANDLE_FULL }; #endif /* _RMNET_DATA_H_ */ net/rmnet_data/rmnet_data_config.c +45 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ #include "rmnet_data_vnd.h" #include "rmnet_data_private.h" RMNET_LOG_MODULE(RMNET_DATA_LOGMASK_CONFIG); /* ***************** Local Definitions and Declarations ********************* */ static struct sock *nl_socket_handle; Loading Loading @@ -316,6 +318,41 @@ static void _rmnet_netlink_get_vnd_name resp_rmnet->arg_length = RMNET_NL_MSG_SIZE(vnd); } static void _rmnet_netlink_add_del_vnd_tc_flow (uint32_t command, struct rmnet_nl_msg_s *rmnet_header, struct rmnet_nl_msg_s *resp_rmnet) { uint32_t id; uint32_t map_flow_id; uint32_t tc_flow_id; _RMNET_NETLINK_NULL_CHECKS(); resp_rmnet->crd = RMNET_NETLINK_MSG_RETURNCODE; id = rmnet_header->flow_control.id; map_flow_id = rmnet_header->flow_control.map_flow_id; tc_flow_id = rmnet_header->flow_control.tc_flow_id; switch (command) { case RMNET_NETLINK_ADD_VND_TC_FLOW: resp_rmnet->return_code = rmnet_vnd_add_tc_flow(id, map_flow_id, tc_flow_id); break; case RMNET_NETLINK_DEL_VND_TC_FLOW: resp_rmnet->return_code = rmnet_vnd_del_tc_flow(id, map_flow_id, tc_flow_id); break; default: LOGM("%s(): called with unhandled command %d\n", __func__, command); resp_rmnet->return_code = RMNET_CONFIG_INVALID_REQUEST; break; } } /** * rmnet_config_netlink_msg_handler() - Netlink message handler callback * @skb: Packet containing netlink messages Loading Loading @@ -418,6 +455,13 @@ void rmnet_config_netlink_msg_handler(struct sk_buff *skb) _rmnet_netlink_get_vnd_name(rmnet_header, resp_rmnet); break; case RMNET_NETLINK_DEL_VND_TC_FLOW: case RMNET_NETLINK_ADD_VND_TC_FLOW: _rmnet_netlink_add_del_vnd_tc_flow(rmnet_header->message_type, rmnet_header, resp_rmnet); break; default: resp_rmnet->crd = RMNET_NETLINK_MSG_RETURNCODE; resp_rmnet->return_code = RMNET_CONFIG_UNKNOWN_MESSAGE; Loading @@ -425,6 +469,7 @@ void rmnet_config_netlink_msg_handler(struct sk_buff *skb) } rtnl_unlock(); nlmsg_unicast(nl_socket_handle, skb_response, return_pid); LOGD("%s(): Done processing command\n", __func__); } Loading net/rmnet_data/rmnet_data_handlers.c +3 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,9 @@ #include "rmnet_data_vnd.h" #include "rmnet_map.h" RMNET_LOG_MODULE(RMNET_DATA_LOGMASK_HANDLER); void rmnet_egress_handler(struct sk_buff *skb, struct rmnet_logical_ep_conf_s *ep); Loading net/rmnet_data/rmnet_data_main.c +4 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,10 @@ unsigned int rmnet_data_log_level = RMNET_LOG_LVL_ERR | RMNET_LOG_LVL_HI; module_param(rmnet_data_log_level, uint, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(log_level, "Logging level"); unsigned int rmnet_data_log_module_mask; module_param(rmnet_data_log_module_mask, uint, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(rmnet_data_log_module_mask, "Logging module mask"); /* ***************** Startup/Shutdown *************************************** */ /** Loading net/rmnet_data/rmnet_data_private.h +17 −3 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #define RMNET_ETHERNET_HEADER_LENGTH 14 extern unsigned int rmnet_data_log_level; extern unsigned int rmnet_data_log_module_mask; #define RMNET_INIT_OK 0 #define RMNET_INIT_ERROR 1 Loading @@ -32,6 +33,15 @@ extern unsigned int rmnet_data_log_level; #define RMNET_LOG_LVL_HI (1<<1) #define RMNET_LOG_LVL_ERR (1<<0) #define RMNET_LOG_MODULE(X) \ static uint32_t rmnet_mod_mask = X #define RMNET_DATA_LOGMASK_CONFIG (1<<0) #define RMNET_DATA_LOGMASK_HANDLER (1<<1) #define RMNET_DATA_LOGMASK_VND (1<<2) #define RMNET_DATA_LOGMASK_MAPD (1<<3) #define RMNET_DATA_LOGMASK_MAPC (1<<4) #define LOGE(fmt, ...) do { if (rmnet_data_log_level & RMNET_LOG_LVL_ERR) \ pr_err(fmt, ##__VA_ARGS__); \ } while (0) Loading @@ -49,9 +59,13 @@ extern unsigned int rmnet_data_log_level; pr_notice(fmt, ##__VA_ARGS__); \ } while (0) #define LOGD(fmt, ...) do { if (unlikely \ (rmnet_data_log_level & RMNET_LOG_LVL_DBG)) \ pr_debug(fmt, ##__VA_ARGS__); \ /* Don't use pr_debug as it is compiled out of the kernel. We can be sure of * minimal impact as LOGD is not enabled by default. */ #define LOGD(fmt, ...) do { if (unlikely( \ (rmnet_data_log_level & RMNET_LOG_LVL_DBG) \ && (rmnet_data_log_module_mask & rmnet_mod_mask))) \ pr_notice(fmt, ##__VA_ARGS__); \ } while (0) #endif /* _RMNET_DATA_PRIVATE_H_ */ Loading
include/uapi/linux/rmnet_data.h +25 −2 Original line number Diff line number Diff line Loading @@ -66,6 +66,11 @@ struct rmnet_nl_msg_s { uint32_t id; uint8_t vnd_name[RMNET_MAX_STR_LEN]; } vnd; struct { uint32_t id; uint32_t map_flow_id; uint32_t tc_flow_id; } flow_control; }; }; Loading Loading @@ -186,7 +191,24 @@ enum rmnet_netlink_message_types_e { * Args: int32_t node number * Returns: status code */ RMNET_NETLINK_FREE_VND RMNET_NETLINK_FREE_VND, /* * RMNET_NETLINK_ADD_VND_TC_FLOW - Add flow control handle on VND * Args: int32_t node number * uint32_t MAP Flow Handle * uint32_t TC Flow Handle * Returns: status code */ RMNET_NETLINK_ADD_VND_TC_FLOW, /* * RMNET_NETLINK_DEL_VND_TC_FLOW - Removes flow control handle on VND * Args: int32_t node number * uint32_t MAP Flow Handle * Returns: status code */ RMNET_NETLINK_DEL_VND_TC_FLOW }; enum rmnet_config_endpoint_modes_e { Loading @@ -205,7 +227,8 @@ enum rmnet_config_return_codes_e { RMNET_CONFIG_INVALID_REQUEST, RMNET_CONFIG_NO_SUCH_DEVICE, RMNET_CONFIG_BAD_ARGUMENTS, RMNET_CONFIG_BAD_EGRESS_DEVICE RMNET_CONFIG_BAD_EGRESS_DEVICE, RMNET_CONFIG_TC_HANDLE_FULL }; #endif /* _RMNET_DATA_H_ */
net/rmnet_data/rmnet_data_config.c +45 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ #include "rmnet_data_vnd.h" #include "rmnet_data_private.h" RMNET_LOG_MODULE(RMNET_DATA_LOGMASK_CONFIG); /* ***************** Local Definitions and Declarations ********************* */ static struct sock *nl_socket_handle; Loading Loading @@ -316,6 +318,41 @@ static void _rmnet_netlink_get_vnd_name resp_rmnet->arg_length = RMNET_NL_MSG_SIZE(vnd); } static void _rmnet_netlink_add_del_vnd_tc_flow (uint32_t command, struct rmnet_nl_msg_s *rmnet_header, struct rmnet_nl_msg_s *resp_rmnet) { uint32_t id; uint32_t map_flow_id; uint32_t tc_flow_id; _RMNET_NETLINK_NULL_CHECKS(); resp_rmnet->crd = RMNET_NETLINK_MSG_RETURNCODE; id = rmnet_header->flow_control.id; map_flow_id = rmnet_header->flow_control.map_flow_id; tc_flow_id = rmnet_header->flow_control.tc_flow_id; switch (command) { case RMNET_NETLINK_ADD_VND_TC_FLOW: resp_rmnet->return_code = rmnet_vnd_add_tc_flow(id, map_flow_id, tc_flow_id); break; case RMNET_NETLINK_DEL_VND_TC_FLOW: resp_rmnet->return_code = rmnet_vnd_del_tc_flow(id, map_flow_id, tc_flow_id); break; default: LOGM("%s(): called with unhandled command %d\n", __func__, command); resp_rmnet->return_code = RMNET_CONFIG_INVALID_REQUEST; break; } } /** * rmnet_config_netlink_msg_handler() - Netlink message handler callback * @skb: Packet containing netlink messages Loading Loading @@ -418,6 +455,13 @@ void rmnet_config_netlink_msg_handler(struct sk_buff *skb) _rmnet_netlink_get_vnd_name(rmnet_header, resp_rmnet); break; case RMNET_NETLINK_DEL_VND_TC_FLOW: case RMNET_NETLINK_ADD_VND_TC_FLOW: _rmnet_netlink_add_del_vnd_tc_flow(rmnet_header->message_type, rmnet_header, resp_rmnet); break; default: resp_rmnet->crd = RMNET_NETLINK_MSG_RETURNCODE; resp_rmnet->return_code = RMNET_CONFIG_UNKNOWN_MESSAGE; Loading @@ -425,6 +469,7 @@ void rmnet_config_netlink_msg_handler(struct sk_buff *skb) } rtnl_unlock(); nlmsg_unicast(nl_socket_handle, skb_response, return_pid); LOGD("%s(): Done processing command\n", __func__); } Loading
net/rmnet_data/rmnet_data_handlers.c +3 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,9 @@ #include "rmnet_data_vnd.h" #include "rmnet_map.h" RMNET_LOG_MODULE(RMNET_DATA_LOGMASK_HANDLER); void rmnet_egress_handler(struct sk_buff *skb, struct rmnet_logical_ep_conf_s *ep); Loading
net/rmnet_data/rmnet_data_main.c +4 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,10 @@ unsigned int rmnet_data_log_level = RMNET_LOG_LVL_ERR | RMNET_LOG_LVL_HI; module_param(rmnet_data_log_level, uint, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(log_level, "Logging level"); unsigned int rmnet_data_log_module_mask; module_param(rmnet_data_log_module_mask, uint, S_IRUGO | S_IWUSR); MODULE_PARM_DESC(rmnet_data_log_module_mask, "Logging module mask"); /* ***************** Startup/Shutdown *************************************** */ /** Loading
net/rmnet_data/rmnet_data_private.h +17 −3 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #define RMNET_ETHERNET_HEADER_LENGTH 14 extern unsigned int rmnet_data_log_level; extern unsigned int rmnet_data_log_module_mask; #define RMNET_INIT_OK 0 #define RMNET_INIT_ERROR 1 Loading @@ -32,6 +33,15 @@ extern unsigned int rmnet_data_log_level; #define RMNET_LOG_LVL_HI (1<<1) #define RMNET_LOG_LVL_ERR (1<<0) #define RMNET_LOG_MODULE(X) \ static uint32_t rmnet_mod_mask = X #define RMNET_DATA_LOGMASK_CONFIG (1<<0) #define RMNET_DATA_LOGMASK_HANDLER (1<<1) #define RMNET_DATA_LOGMASK_VND (1<<2) #define RMNET_DATA_LOGMASK_MAPD (1<<3) #define RMNET_DATA_LOGMASK_MAPC (1<<4) #define LOGE(fmt, ...) do { if (rmnet_data_log_level & RMNET_LOG_LVL_ERR) \ pr_err(fmt, ##__VA_ARGS__); \ } while (0) Loading @@ -49,9 +59,13 @@ extern unsigned int rmnet_data_log_level; pr_notice(fmt, ##__VA_ARGS__); \ } while (0) #define LOGD(fmt, ...) do { if (unlikely \ (rmnet_data_log_level & RMNET_LOG_LVL_DBG)) \ pr_debug(fmt, ##__VA_ARGS__); \ /* Don't use pr_debug as it is compiled out of the kernel. We can be sure of * minimal impact as LOGD is not enabled by default. */ #define LOGD(fmt, ...) do { if (unlikely( \ (rmnet_data_log_level & RMNET_LOG_LVL_DBG) \ && (rmnet_data_log_module_mask & rmnet_mod_mask))) \ pr_notice(fmt, ##__VA_ARGS__); \ } while (0) #endif /* _RMNET_DATA_PRIVATE_H_ */