Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2018-present Open Networking Foundation |
| 3 | |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | #ifndef OPENOLT_CORE_UTILS_H_ |
| 17 | #define OPENOLT_CORE_UTILS_H_ |
| 18 | #include <string> |
| 19 | #include <unistd.h> |
Thiyagarajan Subramani | 03bc66f | 2020-04-01 15:58:53 +0530 | [diff] [blame] | 20 | #include <ifaddrs.h> |
| 21 | #include <arpa/inet.h> |
Humera Kouser | 6143c9e | 2020-06-17 22:37:31 +0530 | [diff] [blame] | 22 | #include <sys/ioctl.h> |
| 23 | #include <net/if.h> |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 24 | |
| 25 | #include "core.h" |
| 26 | #include "core_data.h" |
| 27 | #include "error_format.h" |
Orhan Kupusoglu | 1fd7707 | 2021-03-23 08:13:25 -0700 | [diff] [blame] | 28 | #include <grpc/grpc_security_constants.h> |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 29 | |
| 30 | extern "C" |
| 31 | { |
| 32 | #include <bcmolt_api.h> |
| 33 | #include <bcmolt_host_api.h> |
| 34 | #include <bcmolt_api_model_supporting_enums.h> |
| 35 | #include <bcmolt_api_model_supporting_structs.h> |
| 36 | |
| 37 | #include <bcmolt_api_conn_mgr.h> |
| 38 | //CLI header files |
| 39 | #include <bcmcli_session.h> |
| 40 | #include <bcmcli.h> |
| 41 | #include <bcm_api_cli.h> |
| 42 | |
| 43 | #include <bcmos_common.h> |
| 44 | #include <bcm_config.h> |
| 45 | // FIXME : dependency problem |
| 46 | // #include <bcm_common_gpon.h> |
| 47 | // #include <bcm_dev_log_task.h> |
| 48 | } |
| 49 | |
| 50 | |
| 51 | std::string serial_number_to_str(bcmolt_serial_number* serial_number); |
| 52 | std::string vendor_specific_to_str(const char* const serial_number); |
| 53 | uint16_t get_dev_id(void); |
| 54 | int get_default_tm_sched_id(int intf_id, std::string direction); |
Burak Gurdag | 2f2618c | 2020-04-23 13:20:30 +0000 | [diff] [blame] | 55 | uint32_t get_tm_sched_id(int pon_intf_id, int onu_id, int uni_id, std::string direction, int tech_profile_id); |
| 56 | void free_tm_sched_id(int pon_intf_id, int onu_id, int uni_id, std::string direction, int tech_profile_id); |
| 57 | bool is_tm_sched_id_present(int pon_intf_id, int onu_id, int uni_id, std::string direction, int tech_profile_id); |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 58 | bool check_tm_qmp_equality(std::vector<uint32_t> tmq_map_profileA, std::vector<uint32_t> tmq_map_profileB); |
| 59 | std::string* get_valid_queues_pbit_map(std::string *queues_pbit_map, uint32_t size); |
| 60 | std::vector<uint32_t> get_tmq_map_profile(std::string *queues_pbit_map, uint32_t *queues_priority_q, uint32_t size); |
| 61 | int get_tm_qmp_id(std::vector<uint32_t> tmq_map_profile); |
| 62 | void update_sched_qmp_id_map(uint32_t sched_id,uint32_t pon_intf_id, uint32_t onu_id, |
| 63 | uint32_t uni_id, int tm_qmp_id); |
| 64 | int get_tm_qmp_id(uint32_t sched_id,uint32_t pon_intf_id, uint32_t onu_id, uint32_t uni_id); |
| 65 | int get_tm_qmp_id(uint32_t sched_id,uint32_t pon_intf_id, uint32_t onu_id, uint32_t uni_id, |
| 66 | std::vector<uint32_t> tmq_map_profile); |
| 67 | bool free_tm_qmp_id(uint32_t sched_id,uint32_t pon_intf_id, uint32_t onu_id, |
| 68 | uint32_t uni_id, int tm_qmp_id); |
| 69 | int get_acl_id(); |
| 70 | void free_acl_id (int acl_id); |
Girish Gowdra | 252f497 | 2020-09-07 21:24:01 -0700 | [diff] [blame] | 71 | uint16_t get_flow_id(); |
| 72 | bool get_flow_ids(int num_of_flow_ids, uint16_t *flow_ids); |
| 73 | void free_flow_id (uint16_t flow_id); |
| 74 | void free_flow_ids(uint8_t num_flows, uint16_t *flow_ids); |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 75 | std::string get_qos_type_as_string(bcmolt_egress_qos_type qos_type); |
| 76 | bcmolt_egress_qos_type get_qos_type(uint32_t pon_intf_id, uint32_t onu_id, uint32_t uni_id, uint32_t queue_size=0); |
| 77 | void clear_qos_type(uint32_t pon_intf_id, uint32_t onu_id, uint32_t uni_id); |
| 78 | std::string GetDirection(int direction); |
| 79 | bcmos_errno wait_for_alloc_action(uint32_t intf_id, uint32_t alloc_id, AllocCfgAction action); |
Thiyagarajan Subramani | e976fcf | 2021-05-07 22:46:57 +0530 | [diff] [blame] | 80 | bcmos_errno wait_for_gem_action(uint32_t intf_id, uint32_t gem_port_id, GemCfgAction action); |
Girish Gowdra | 7a79dae | 2020-02-10 18:22:11 +0530 | [diff] [blame] | 81 | bcmos_errno wait_for_onu_deactivate_complete(uint32_t intf_id, uint32_t onu_id); |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 82 | char* openolt_read_sysinfo(const char* field_name, char* field_val); |
| 83 | Status pushOltOperInd(uint32_t intf_id, const char *type, const char *state); |
| 84 | void openolt_cli_get_prompt_cb(bcmcli_session *session, char *buf, uint32_t max_len); |
| 85 | int _bal_apiend_cli_thread_handler(long data); |
| 86 | bcmos_errno bcm_openolt_api_cli_init(bcmcli_entry *parent_dir, bcmcli_session *session); |
| 87 | bcmos_errno bcm_cli_quit(bcmcli_session *session, const bcmcli_cmd_parm parm[], uint16_t n_parms); |
| 88 | int get_status_bcm_cli_quit(void); |
| 89 | bcmos_errno bcmolt_apiend_cli_init(); |
Thiyagarajan Subramani | ad46323 | 2020-02-28 19:10:43 +0530 | [diff] [blame] | 90 | bcmos_errno get_pon_interface_status(bcmolt_interface pon_ni, bcmolt_interface_state *state, bcmolt_status *los_status); |
Girish Gowdra | 72cbee9 | 2021-11-05 15:16:18 -0700 | [diff] [blame] | 91 | bcmos_errno get_onu_state(bcmolt_interface pon_ni, int onu_id, bcmolt_onu_state *onu_state); |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 92 | bcmos_errno bcmolt_cfg_get_mult_retry(bcmolt_oltid olt, bcmolt_cfg *cfg); |
| 93 | unsigned NumNniIf_(); |
| 94 | unsigned NumPonIf_(); |
| 95 | bcmos_errno get_nni_interface_status(bcmolt_interface id, bcmolt_interface_state *state); |
Elia Battiston | 869a5de | 2022-02-08 11:40:58 +0100 | [diff] [blame] | 96 | bcmos_errno get_nni_interface_speed(bcmolt_interface id, uint32_t *speed); |
Thiyagarajan Subramani | 19168f5 | 2021-05-25 23:26:41 +0530 | [diff] [blame] | 97 | Status install_gem_port(int32_t intf_id, int32_t onu_id, int32_t uni_id, int32_t gemport_id, std::string board_technology); |
| 98 | Status remove_gem_port(int32_t intf_id, int32_t onu_id, int32_t uni_id, int32_t gemport_id, std::string board_technology); |
| 99 | Status enable_encryption_for_gem_port(int32_t intf_id, int32_t gemport_id, std::string board_technology); |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 100 | Status update_acl_interface(int32_t intf_id, bcmolt_interface_type intf_type, uint32_t access_control_id, |
| 101 | bcmolt_members_update_command acl_cmd); |
| 102 | Status install_acl(const acl_classifier_key acl_key); |
| 103 | Status remove_acl(int acl_id); |
| 104 | void formulate_acl_classifier_key(acl_classifier_key *key, const ::openolt::Classifier& classifier); |
Girish Gowdra | 1935e6a | 2020-10-31 21:48:22 -0700 | [diff] [blame] | 105 | Status handle_acl_rule_install(int32_t onu_id, uint64_t flow_id, int32_t gemport_id, |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 106 | const std::string flow_type, int32_t access_intf_id, |
Girish Gowdra | 252f497 | 2020-09-07 21:24:01 -0700 | [diff] [blame] | 107 | int32_t network_intf_id, |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 108 | const ::openolt::Classifier& classifier); |
| 109 | void clear_gem_port(int gemport_id, int access_intf_id); |
Girish Gowdra | 252f497 | 2020-09-07 21:24:01 -0700 | [diff] [blame] | 110 | Status handle_acl_rule_cleanup(int16_t acl_id, int32_t intf_id, const std::string flow_type); |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 111 | Status check_bal_ready(); |
| 112 | Status check_connection(); |
Thiyagarajan Subramani | 03bc66f | 2020-04-01 15:58:53 +0530 | [diff] [blame] | 113 | std::string get_ip_address(const char* nw_intf); |
Jason Huang | 1d9cfce | 2020-05-20 22:58:47 +0800 | [diff] [blame] | 114 | bcmos_errno getOnuMaxLogicalDistance(uint32_t intf_id, uint32_t *mld); |
Humera Kouser | 6143c9e | 2020-06-17 22:37:31 +0530 | [diff] [blame] | 115 | char* get_intf_mac(const char* intf_name, char* mac_address, unsigned int max_size_of_mac_address); |
Girish Gowdra | 252f497 | 2020-09-07 21:24:01 -0700 | [diff] [blame] | 116 | void update_voltha_flow_to_cache(uint64_t voltha_flow_id, device_flow dev_flow); |
| 117 | void remove_voltha_flow_from_cache(uint64_t voltha_flow_id); |
| 118 | bool is_voltha_flow_installed(uint64_t voltha_flow_id ); |
| 119 | const device_flow* get_device_flow(uint64_t voltha_flow_id); |
| 120 | const device_flow_params* get_device_flow_params(uint64_t voltha_flow_id); |
Girish Gowdra | 1935e6a | 2020-10-31 21:48:22 -0700 | [diff] [blame] | 121 | trap_to_host_packet_type get_trap_to_host_packet_type(const ::openolt::Classifier& classifier); |
| 122 | bool is_packet_allowed(bcmolt_access_control_receive_eth_packet_data *data, int32_t gemport_id); |
Orhan Kupusoglu | 1fd7707 | 2021-03-23 08:13:25 -0700 | [diff] [blame] | 123 | std::pair<grpc_ssl_client_certificate_request_type, bool> get_grpc_tls_option(const char* tls_option); |
| 124 | const std::string &get_grpc_tls_option(); |
| 125 | bool is_grpc_secure(); |
| 126 | std::pair<std::string, bool> read_from_txt_file(const std::string& file_name); |
Orhan Kupusoglu | ec57af0 | 2021-05-12 12:38:17 +0000 | [diff] [blame] | 127 | bool save_to_txt_file(const std::string& file_name, const std::string& content); |
Girish Gowdra | cdd5e5f | 2021-12-05 16:48:08 +0530 | [diff] [blame] | 128 | bcmos_errno get_gem_obj_state(bcmolt_interface pon_ni, bcmolt_gem_port_id id, bcmolt_activation_state *state); |
| 129 | bcmos_errno get_alloc_obj_state(bcmolt_interface pon_ni, bcmolt_alloc_id id, bcmolt_activation_state *state); |
Girish Gowdra | b0337eb | 2022-03-25 16:44:21 -0700 | [diff] [blame] | 130 | pair<string, bool> hex_to_ascii_string(unsigned char* ptr, int length); |
| 131 | pair<uint32_t, bool> hex_to_uinteger(unsigned char *ptr, int length); |
Girish Gowdra | ddf9a16 | 2020-01-27 12:56:27 +0530 | [diff] [blame] | 132 | #endif // OPENOLT_CORE_UTILS_H_ |