| /* |
| * Copyright (c) 2013, 2015, 2017-2019, 2021, The Linux Foundation. All rights reserved. |
| * |
| * Permission to use, copy, modify, and/or distribute this software for any |
| * purpose with or without fee is hereby granted, provided that the above |
| * copyright notice and this permission notice appear in all copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| #include "sw.h" |
| #include "ssdk_init.h" |
| #include "fal_init.h" |
| #ifdef IN_MISC |
| #include "fal_misc.h" |
| #endif |
| #ifdef IN_MIB |
| #include "fal_mib.h" |
| #endif |
| #ifdef IN_PORTCONTROL |
| #include "fal_port_ctrl.h" |
| #endif |
| #ifdef IN_PORTVLAN |
| #include "fal_portvlan.h" |
| #endif |
| #ifdef IN_FDB |
| #include "fal_fdb.h" |
| #endif |
| #ifdef IN_STP |
| #include "fal_stp.h" |
| #endif |
| #ifdef IN_IGMP |
| #include "fal_igmp.h" |
| #endif |
| #ifdef IN_QOS |
| #include "fal_qos.h" |
| #endif |
| #ifdef IN_ACL |
| #include "fal_acl.h" |
| #endif |
| #ifdef IN_PPPOE |
| #include "fal_pppoe.h" |
| #endif |
| #ifdef IN_SERVCODE |
| #include "fal_servcode.h" |
| #endif |
| #ifdef IN_CTRLPKT |
| #include "fal_ctrlpkt.h" |
| #endif |
| #ifdef IN_POLICER |
| #include "fal_policer.h" |
| #endif |
| #ifdef IN_SHAPER |
| #include "fal_shaper.h" |
| #endif |
| #include "hsl.h" |
| #include "hsl_dev.h" |
| #include "ssdk_init.h" |
| #include "shell.h" |
| #include "shell_io.h" |
| #include "shell_sw.h" |
| #include <linux/kconfig.h> |
| #include <linux/version.h> |
| #include <linux/kernel.h> |
| #include <linux/module.h> |
| #include <linux/phy.h> |
| #include <linux/platform_device.h> |
| #include <linux/types.h> |
| #include <generated/autoconf.h> |
| #if defined(CONFIG_OF) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) |
| #include <linux/switch.h> |
| #else |
| #include <net/switch.h> |
| #include <linux/ar8216_platform.h> |
| #endif |
| #include <linux/delay.h> |
| #include <linux/phy.h> |
| #include <linux/netdevice.h> |
| #include "ssdk_plat.h" |
| #include <linux/string.h> |
| #include "ref_uci.h" |
| |
| #define MOD_NAME_MAX_LEN 32 |
| #define COMMAND_NAME_MAX_LEN 128 |
| #define COMMAND_LINE_MAX_LEN 1024 |
| #define SWITCH_CFG_LEN_MAX 64 |
| char module_name[MOD_NAME_MAX_LEN] = {0}; |
| char command_name[COMMAND_NAME_MAX_LEN] = {0}; |
| char whole_command_line[COMMAND_LINE_MAX_LEN] = {0}; |
| char *val_ptr[SWITCH_CFG_LEN_MAX] = {0}; |
| static unsigned int parameter_length = 0; |
| #ifdef IN_NAT |
| static char *vrf_dflt_str = "0"; |
| static char *lb_dflt_str = "0"; |
| static char *cookie_dflt_str = "0"; |
| static char *priority_dflt_str = "no"; |
| static char *param_dflt_str = " "; |
| #endif |
| |
| #ifdef IN_QOS |
| #ifndef IN_QOS_MINI |
| static int |
| parse_qos_qtxbufsts(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "buffer_limit")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_qtxbufnr(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "number")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_pttxbufsts(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "buffer_limit")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_pttxbufnr(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "number")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptrxbufnr(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "number")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptreden(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptmodepri(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "priority")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptschmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "weight")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptdefaultspri(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "stag_pri")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptdefaultcpri(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ctag_pri")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptfsprists(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "force_stag_pri_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptfcprists(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "force_ctag_pri_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptquremark(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "table_id")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptgroup(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "pcpgroup")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dscpgroup")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "flowgroup")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptpri(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "pcpprec")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dscpprec")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "preheaderprec")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "flowprec")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "aclprec")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "postaclprec")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "pcpprecforce")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dscpprecforce")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ptremark(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "pcp_change_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dei_change_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dscp_change_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| static int |
| parse_qos_pcpmap(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "group_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "pcp")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internalpcp")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internaldei")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internalpri")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internaldscp")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internaldropprec")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dscpmask")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dscpen")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "pcpen")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "deien")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "prien")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dpen")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "qosprec")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_flowmap(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "group_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "flow_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internalpcp")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internaldei")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internalpri")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internaldscp")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internaldropprec")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_dscpmap(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "group_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dscp")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internalpcp")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internaldei")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internalpri")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internaldscp")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "internaldropprec")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_qscheduler(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "node_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "level")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "spid")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "edrrpri")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cdrrpri")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cdrr_id")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "edrr_id")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "edrrweight")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cdrrweight")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cdrrunit")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "edrrunit")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "drr_frame_mode")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_ringqueue(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "ring_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebmp0")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebmp1")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebmp2")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebmp3")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebmp4")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebmp5")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebmp6")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebmp7")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebmp8")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebmp9")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_dequeue(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dequeue_ctrl_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qos_portscheduler(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| #endif |
| #endif |
| |
| #ifdef IN_COSMAP |
| static int |
| parse_cos_mappri2q(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "pri")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "queue")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_cos_mappri2ehq(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "pri")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "enhance_queue")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| #ifndef IN_COSMAP_MINI |
| static int |
| parse_cos_mapdscp2pri(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "dscp")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "pri")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_cos_mapdscp2dp(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "dscp")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cfi")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_cos_mapup2pri(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "up")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "pri")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_cos_mapup2dp(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "up")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cfi")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_cos_mapdscp2ehpri(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "dscp")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "pri")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_cos_mapdscp2ehdp(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "dscp")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cfi")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_cos_mapup2ehpri(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "up")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "pri")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_cos_mapup2ehdp(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "up")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cfi")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_cos_mapegremark(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "remark_dscp")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "remark_up")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "remark_dei")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "green_dscp")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_dscp")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "green_up")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_up")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "green_dei")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_dei")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| #endif |
| |
| #ifdef IN_RATE |
| static int |
| parse_rate_portpolicer(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "combine_enable")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "byte_based")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "couple_flag")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "color_aware")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "deficit_flag")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "c_bucket_enable")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cir")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cbs")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "c_rate_flag")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "c_meter_interval")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "e_bucket_enable")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eir")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ebs")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "e_rate_flag")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "e_meter_interval")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_rate_portshaper(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "byte_based")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cir")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cbs")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eir")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ebs")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_rate_queueshaper(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "byte_based")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cir")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cbs")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eir")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ebs")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_rate_aclpolicer(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "policer_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "counter_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "byte_based")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "couple_flag")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "color_aware")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "deficit_flag")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cir")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cbs")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eir")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ebs")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "meter_interval")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_rate_ptaddratebyte(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "add_rate_bytes")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_rate_ptgolflowen(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "golbal_flow_control_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_PORTCONTROL |
| #ifndef IN_PORTCONTROL_MINI |
| static int |
| parse_port_duplex(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "duplex")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_speed(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "speed")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_autoadv(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "auto_adv")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_autonegenable(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_autonegrestart(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| static int |
| parse_port_txhdr(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "tx_frame_atheros_header_tag_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_rxhdr(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "rx_frame_atheros_header_tag_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_hdrtype(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "atheros_header_tag_status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "atheros_header_tag_type")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #ifndef IN_PORTCONTROL_MINI |
| static int |
| parse_port_flowctrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "flow_control_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_flowctrlforcemode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "flow_control_force_mode_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_powersave(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "power_save_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_hibernate(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "hibernate_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_txmacstatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "tx_mac_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_rxmacstatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "rx_mac_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_txfcstatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "tx_flow_control_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_rxfcstatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "rx_flow_control_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| #ifndef IN_PORTCONTROL_MINI |
| static int |
| parse_port_bpstatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "back_presure_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_linkforcemode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "link_force_mode_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_macloopback(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mac_loopback_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_congedrop(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_ringfcthresh(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "ring_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "on_thresh")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "off_thresh")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| |
| |
| static int |
| parse_port_ieee8023az(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_crossover(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_prefermedium(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_fibermode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_localloopback(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_remoteloopback(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_magicframemac(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "macaddr")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_wolstatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_interfacemode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_interfacemodeapply(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_poweron(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_poweroff(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_reset(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_interface8023az(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_promiscmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "promisc_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| static int |
| parse_port_eeecfg(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eee_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eee_capability")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "lpi_sleep_timer")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "advertisement")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "lpi_tx_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eee_status")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "lpi_wakeup_timer")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "link_partner_advertisement")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_srcfiltercfg(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "srcfilter_enable")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "srcfilter_mode")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_framemaxsize(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "frame_max_size")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_mtu(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mtusize")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mtuaction")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_mru(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mrusize")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mruaction")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_port_srcfilter(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_switch_port_loopback(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "loopback_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "crc_stripped_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "loopback_rate")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| #endif |
| #endif |
| |
| #ifdef IN_PORTVLAN |
| static int |
| parse_portvlan_ingress(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ingress_vlan_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_egress(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "egress_vlan_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_member(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "member")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_forcevid(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "force_vid_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_forcemode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "force_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_svlantpid(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "stag_tpid")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| static int |
| parse_portvlan_defaultsvid(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "default_stag_vid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| static int |
| parse_portvlan_defaultcvid(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "default_ctag_vid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_globalqinqmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "mask")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ingress_qinq_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "egress_qinq_mode")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_ptqinqmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mask")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ingress_qinq_role")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "egress_qinq_role")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #ifdef HPPE |
| static int |
| parse_portvlan_intpid(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "mask")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ctagtpid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "stagtpid")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_egtpid(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "mask")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ctagtpid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "stagtpid")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_ingressfilter(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "membership_filter_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tagged_filter_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "untagged_filter_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "priority_tagged_filter_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_defaultvlantag(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "direction")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "default_ctag_vid_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "default_stag_vid_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mask")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "default_ctag_vid")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "default_stag_vid")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "default_ctag_pri")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "default_stag_pri")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "default_ctag_dei")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "default_stag_dei")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_tagpropagation(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "direction")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mask")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vid_propagation_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "pri_propagation_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dei_propagation_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_translationmissaction(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "translation_miss_action")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| static int |
| parse_portvlan_egmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mask")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ctag_egress_vlan_mode")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "stag_egress_vlan_mode")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #ifdef HPPE |
| static int |
| parse_portvlan_vsiegmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vsi_egress_vlan_mode")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_vsiegmodeen(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vsi_egress_vlan_mode_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_counter(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "index")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_translationadv(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "direction")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "stagformat")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "svid_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "svid")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "spcp_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "spcp")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sdei_en")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sdei")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ctagformat")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cvid_en")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cvid")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cpcp_en")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cpcp")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cdei_en")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cdei")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "frame_type_en")) { |
| val_ptr[16] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "frametype")) { |
| val_ptr[17] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "protocol_en")) { |
| val_ptr[18] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "protocol")) { |
| val_ptr[19] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vsivalid")) { |
| val_ptr[20] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vsi_en")) { |
| val_ptr[21] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[22] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "swap_svid_cvid")) { |
| val_ptr[23] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "svid_translation_cmd")) { |
| val_ptr[24] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "svidtranslation")) { |
| val_ptr[25] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cvid_translation_cmd")) { |
| val_ptr[26] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cvidtranslation")) { |
| val_ptr[27] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "swap_spcp_cpcp")) { |
| val_ptr[28] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "spcp_translation_en")) { |
| val_ptr[29] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "spcptranslation")) { |
| val_ptr[30] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cpcp_translation_en")) { |
| val_ptr[31] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cpcptranslation")) { |
| val_ptr[32] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "swap_sdei_cdei")) { |
| val_ptr[33] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sdei_translation_en")) { |
| val_ptr[34] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sdeitranslation")) { |
| val_ptr[35] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cdei_translation_en")) { |
| val_ptr[36] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cdeitranslation")) { |
| val_ptr[37] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "counter_en")) { |
| val_ptr[38] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "counter_id")) { |
| val_ptr[39] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vsi_translation_en")) { |
| val_ptr[40] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vsitranslation")) { |
| val_ptr[41] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| #ifndef IN_PORTVLAN_MINI |
| static int |
| parse_portvlan_invlan(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ingress_tag_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_tlsmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "tls_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_pripropagation(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_priority_propagation_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| |
| |
| static int |
| parse_portvlan_vlanpropagation(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_propagation_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_translation(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "original_vid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "bi_direction")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "forward_direction")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "reverse_direction")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "svid")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cvid")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "original_vid_is_cvid")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "svid_enable")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cvid_enable")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "one_2_one_vlan")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_qinqmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "qinq_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_qinqrole(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "qinq_role")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_macvlanxlt(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "egress_mac_based_vlan")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_netiso(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "net_isolate")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_egbypass(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "egress_translation_filter_bypass")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_portvlan_ptvrfid(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| #endif |
| |
| #ifdef IN_VLAN |
| static int |
| parse_vlan_entry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_vlan_member(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "tag_mode")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #ifndef IN_VLAN_MINI |
| static int |
| parse_vlan_learnsts(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "learn_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| #endif |
| |
| #ifdef IN_FDB |
| #ifndef IN_FDB_MINI |
| static int |
| parse_fdb_entry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "addr")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "fid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dacmd")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "sacmd")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dest_port")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "static")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "leaky")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mirror")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "clone")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "queue_override")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cross_pt_state")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "white_list_en")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "load_balance_en")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "load_balance")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| if(val_ptr[12] == NULL) { |
| val_ptr[12] = "no"; |
| parameter_length++; |
| } |
| return rv; |
| } |
| |
| static int |
| parse_fdb_resventry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "addr")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "fid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dacmd")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "sacmd")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dest_port")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "static")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "leaky")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mirror")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "clone")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "queue_override")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cross_pt_state")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "white_list_en")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| static int |
| parse_fdb_portlearn(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "learn_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #ifndef IN_FDB_MINI |
| static int |
| parse_fdb_agectrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "aging_status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_agetime(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "aging_time")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_vlansmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_searching_mode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_ptlearnlimit(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "learn_limit_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "learn_limit_counter")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_ptlearnexceedcmd(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "learn_exceed_cmd")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_learnlimit(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "learn_limit_status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "learn_limit_counter")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_learnexceedcmd(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "learn_exceed_cmd")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_ptlearnstatic(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "learn_static_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_learnctrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "learn_status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_ptlearnctrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "learn_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "learnaction")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_ptstationmove(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "stationmove_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "stationmove_action")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_fdb_ptmaclimitctrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "maclimit_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "maclimit_counter")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "maclimit_exceed_action")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| #endif |
| |
| #ifdef IN_RSS_HASH |
| static int |
| parse_rsshash_config(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "hash_mode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hask_mask")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_fragment_mode")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_seed")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_sip_mix")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_dip_mix")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_protocol_mix")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_sport_mix")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_dport_mix")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_fin_inner")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_fin_outer")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_IGMP |
| static int |
| parse_igmp_mode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "igmp_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_cmd(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "igmp_command")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_portjoin(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "join_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_portleave(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "leave_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_rp(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "route_port_bitmap")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_createstatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "create_status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_static(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "static_status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_leaky(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "leaky_status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_version3(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "version3_status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_queue(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_ptlearnlimit(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "learn_limit_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "learn_limit_counter")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_ptlearnexceedcmd(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "learn_exceed_cmd")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_igmp_multi(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "group_type")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "group_ip_addr")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "source_type")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "source_ip_addr")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "portmap")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vlanid")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_SEC |
| static int |
| parse_sec_mac(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "item")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "value")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_sec_ip(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "item")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "value")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_sec_ip4(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "item")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "value")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_sec_ip6(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "item")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "value")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_sec_tcp(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "item")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "value")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_sec_udp(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "item")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "value")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_sec_icmp4(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "item")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "value")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_sec_icmp6(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "item")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "value")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #ifdef HPPE |
| static int |
| parse_sec_expctrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "excep_type")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "excep_cmd")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "deacclr_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l3route_only_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l2fwd_only_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l2flow_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l3flow_en")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "multicast_en")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_sec_l3parser(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "small_ip4ttl")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "small_ip6hoplimit")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_sec_l4parser(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag0")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag0_mask")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag1")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag1_mask")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag2")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag2_mask")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag3")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag3_mask")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag4")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag4_mask")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag5")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag5_mask")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag6")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag6_mask")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag7")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcpflag7_mask")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| #endif |
| |
| #ifdef IN_MISC |
| #ifndef IN_MISC_MINI |
| static int |
| parse_misc_framemaxsize(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "frame_max_size")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| static int |
| parse_misc_ptunkucfilter(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_ptunkmcfilter(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_ptbcfilter(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #ifndef IN_MISC_MINI |
| static int |
| parse_misc_autoneg(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| static int |
| parse_misc_cpuport(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #ifndef IN_MISC_MINI |
| static int |
| parse_misc_pppoecmd(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_pppoe(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_ptdhcp(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_arpcmd(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| static int |
| parse_misc_eapolcmd(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_eapolstatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #ifndef IN_MISC_MINI |
| static int |
| parse_misc_rip(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_ptarpreq(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_ptarpack(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_extendpppoe(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "session_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "multicast_session")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "unicast_session")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "l3if_index")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "l3if_index_valid")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "smacaddr")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "smacaddr_valid")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_pppoeid(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "index")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "pppoe_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_cpuvid(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_rtdpppoe(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_glomacaddr(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "macaddr")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_framecrc(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_misc_pppoeen(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "l3if_index")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "pppoe_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| #endif |
| |
| #ifdef IN_IP |
| #ifndef IN_IP_MINI |
| static int |
| parse_ip_hostentry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| char* vrf_temp = "0"; |
| val_ptr[6] = vrf_temp; |
| parameter_length ++; |
| val_ptr[7] = vrf_temp; |
| parameter_length ++; |
| val_ptr[12] = param_dflt_str; |
| parameter_length ++; |
| val_ptr[13] = vrf_temp; |
| parameter_length ++; |
| val_ptr[14] = vrf_temp; |
| parameter_length ++; |
| val_ptr[15] = vrf_temp; |
| parameter_length ++; |
| val_ptr[16] = param_dflt_str; |
| parameter_length ++; |
| val_ptr[17] = param_dflt_str; |
| parameter_length ++; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "entry_flags")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "entry_status")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ip_addr")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mac_addr")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "interface_id")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "load_balance_num")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mirror")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "counter")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "counter_id")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if (!strcmp(ext_value_p->option_name, "dstinfo")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if (!strcmp(ext_value_p->option_name, "synctoggle")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if (!strcmp(ext_value_p->option_name, "lan_wan")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[16] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if (!strcmp(ext_value_p->option_name, "sip_addr")) { |
| val_ptr[17] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_intfentry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| char* vrf_temp = "0"; |
| val_ptr[1] = vrf_temp; |
| parameter_length ++; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_low")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_high")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mac_addr")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ipv4_route")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ipv6_route")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_ptarplearn(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_arplearn(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "mode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_ptipsrcguard(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "source_guard_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_ptarpsrcguard(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "source_guard_mode")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_routestatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_ipunksrc(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_arpunksrc(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_agetime(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "age_time")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_wcmphashmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "wcmp_hash_mode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_defaultflowcmd(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "flow_type")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "flow_cmd")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_defaultrtflowcmd(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "flow_type")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "flow_cmd")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_hostroute(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "entry_valid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ip_version")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ip_addr")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "prefix_length")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_defaultroute(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "entry_valid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "route_type")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "index")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_vrfbaseaddr(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "base_addr")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_vrfbasemask(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "base_mask")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_rfsip4(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "mac_addr")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ip4_addr")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_id")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "load_balance")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_rfsip6(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "mac_addr")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ip6_addr")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_id")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "load_balance")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_vsiarpsg(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceguard_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceguard_violation_action")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceguard_port_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceguard_svlan_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourcegurad_cvlan_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceunkown_action")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceguard_en")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceguard_violation_action")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceguard_port_en")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceguard_svlan_en")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceguard_cvlan_en")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceunknown_action")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_vsisg(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceguard_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourcegurad_violation_action")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceguard_port_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceguard_svlan_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceguard_cvlan_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceunkown_action")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceguard_en")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceguard_violation_action")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceguard_port_en")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceguard_svlan_en")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceguard_cvlan_en")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceunknown_action")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_portarpsg(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceguard_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceguard_violation_action")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceguard_port_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceguard_svlan_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceguard_cvlan_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_arp_sourceunkown_action")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceguard_en")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceguard_violation_action")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceguard_port_en")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceguard_svlan_en")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceguard_cvlan_en")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_nd_sourceunkown_action")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_portsg(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceguard_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceguard_violation_action")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceguard_port_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceguard_svlan_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceguard_cvlan_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_sourceunkown_action")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceguard_en")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceguard_violation_action")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceguard_port_en")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceguard_svlan_en")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceguard_cvlan_en")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_sourceunkown_action")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_pubip(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "index")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4addr")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_networkroute(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "index")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "type")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dstinfo")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "lan_wan")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4addr")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4addr_mask")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_intf(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "index")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mru")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mtu")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ttl_dec_bypass_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4_unicast_route_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6_unicast_route_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "icmp_trigger_en")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ttl_exceed_action")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ttl_exceed_deacclr_en")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "macaddr_bitmap")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "macaddr")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_vsiintf(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l3if_valid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l3if_index")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_portintf(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l3if_valid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l3if_index")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_nexthop(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "index")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "type")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l3if_index")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip_to_me_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "pub_ip_index")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "stag_fmt")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "svid")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ctag_fmt")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cvid")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "macaddr")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dnat_ip")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_portmac(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "valid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "macaddr")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_routemiss(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_mcmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l2_ip4_multicast_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l2_ip4_multicast_mode")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l2_ip6_multicast_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l2_ip6_multicast_mode")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ip_globalctrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "mru_fail_action")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mru_deacclr_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mtu_fail_action")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mtu_deacclr_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mtu_nonfrag_fail_action")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mtu_nonfrag_deacclr_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "prefix_bc_action")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "prefix_deacclr_en")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "icmp_redirect_action")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "icmp_redirect_deacclr_en")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_mode_0")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_mode_1")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| #endif |
| |
| #ifdef IN_NAT |
| static int |
| parse_nat_natentry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| val_ptr[4] = vrf_dflt_str; |
| parameter_length ++; |
| val_ptr[12] = param_dflt_str; |
| parameter_length ++; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "entry_flags")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "entry_status")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "select_index")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if(!strcmp(ext_value_p->option_name, "src_addr")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "translate_addr")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "port_number")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "port_range")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mirror")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "counter")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "counter_id")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_naptentry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| val_ptr[3] = vrf_dflt_str; |
| parameter_length ++; |
| val_ptr[4] = cookie_dflt_str; |
| parameter_length ++; |
| val_ptr[5] = lb_dflt_str; |
| parameter_length ++; |
| val_ptr[15] = param_dflt_str; |
| parameter_length ++; |
| val_ptr[16] = priority_dflt_str; |
| parameter_length ++; |
| val_ptr[17] = param_dflt_str; |
| parameter_length ++; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "entry_flags")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "entry_status")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if(!strcmp(ext_value_p->option_name, "flow_cookie")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if(!strcmp(ext_value_p->option_name, "load_balance")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if(!strcmp(ext_value_p->option_name, "src_addr")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dst_addr")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "translate_addr")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "src_port")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dst_port")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "translate_port")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mirror")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "counter")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "counter_id")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if(!strcmp(ext_value_p->option_name, "priority")) { |
| val_ptr[16] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if(!strcmp(ext_value_p->option_name, "priority_val")) { |
| val_ptr[17] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_flowentry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| val_ptr[13] = param_dflt_str; |
| parameter_length ++; |
| val_ptr[15] = param_dflt_str; |
| parameter_length ++; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "entry_flags")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "entry_status")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "flow_cookie")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "load_balance")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "src_addr")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dst_addr")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "src_port")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dst_port")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "mirror")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "counter")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "counter_id")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else if(!strcmp(ext_value_p->option_name, "priority")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "priority_val")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| parameter_length --; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_flowcookie(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "proto")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "src_addr")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dst_addr")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "src_port")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dst_port")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "flow_cookie")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_flowrfs(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "proto")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "src_addr")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dst_addr")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "src_port")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "dst_port")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "flow_rfs")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| |
| |
| static int |
| parse_nat_natstatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_naptstatus(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_nathash(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "hash_flag")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_naptmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "napt_mode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_prvbaseaddr(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "base_addr")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_prvaddrmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_pubaddr(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "pub_addr")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_natunksess(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_prvbasemask(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "base_addr_mask")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_nat_global(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| char *sync_str = "disable"; |
| char *portbmp_str = "0x20"; |
| val_ptr[1] = sync_str; |
| parameter_length++; |
| val_ptr[2] = portbmp_str; |
| parameter_length++; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "sync")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| parameter_length--; |
| } else if(!strcmp(ext_value_p->option_name, "portbmp")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| parameter_length--; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_STP |
| static int |
| parse_stp_portstate(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "stp_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "stp_status")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_MIRROR |
| static int |
| parse_mirror_analypt(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "analysis_port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_mirror_ptingress(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "ingress_port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_mirror_ptegress(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "egress_port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_mirror_analycfg(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "direction")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "analysis_port")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "analysis_priority")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_LEAKY |
| static int |
| parse_leaky_ucmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "unicast_leaky_mode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_leaky_mcmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "multicast_leaky_mode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_leaky_arpmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_leaky_ptucmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_leaky_ptmcmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_TRUNK |
| static int |
| parse_trunk_group(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "trunk_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "trunk_port_bitmap")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_trunk_hashmode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "trunk_hash_mode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_trunk_failover(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "failover_en")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_MIB |
| static int |
| parse_mib_status(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_mib_cpukeep(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_ACL |
| static int |
| parse_acl_rule(struct switch_val *val, a_uint32_t dev_id) |
| { |
| a_uint32_t prio = 0; |
| a_uint32_t i; |
| a_uint32_t portmap = 0; |
| a_uint32_t rule_id = 0; |
| a_uint32_t obj_type = 0; |
| a_uint32_t obj_value = 0; |
| a_uint32_t list_id = 0xffffffff; |
| fal_acl_rule_t rule; |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| a_uint32_t tmpdata = 0; |
| memset(&rule, 0, sizeof(fal_acl_rule_t)); |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "list_id")) { |
| cmd_data_check_uint32((char*)ext_value_p->option_value, |
| &list_id, sizeof(a_uint32_t)); |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "rule_id")) { |
| cmd_data_check_uint32((char*)ext_value_p->option_value, |
| &rule_id, sizeof(a_uint32_t)); |
| if(rule_id == 0) { |
| printk("ACL rule ID should begin with 1. Please Notice!\r\n"); |
| } |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "priority")) { |
| cmd_data_check_uint32((char*)ext_value_p->option_value, |
| &prio, sizeof(a_uint32_t)); |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "rule_type")) { |
| cmd_data_check_ruletype((char*)ext_value_p->option_value, |
| &(rule.rule_type), sizeof(a_uint32_t)); |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "is_postrouting")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.post_routing), sizeof(rule.post_routing)); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_POST_ROURING_EN); |
| } else if(!strcmp(ext_value_p->option_name, "acl_pool")) { |
| cmd_data_check_integer((char*)ext_value_p->option_value, |
| &(tmpdata), 1, 0); |
| rule.acl_pool = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_RES_CHAIN); |
| } else if(!strcmp(ext_value_p->option_name, "dst_mac_address")) { |
| cmd_data_check_macaddr((char*)ext_value_p->option_value, |
| &(rule.dest_mac_val), sizeof(fal_mac_addr_t)); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_DA); |
| } else if(!strcmp(ext_value_p->option_name, "dst_mac_address_mask")) { |
| cmd_data_check_macaddr((char*)ext_value_p->option_value, |
| &(rule.dest_mac_mask), sizeof(fal_mac_addr_t)); |
| } else if(!strcmp(ext_value_p->option_name, "src_mac_address")) { |
| cmd_data_check_macaddr((char*)ext_value_p->option_value, |
| &(rule.src_mac_val), sizeof(fal_mac_addr_t)); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_SA); |
| } else if(!strcmp(ext_value_p->option_name, "src_mac_address_mask")) { |
| cmd_data_check_macaddr((char*)ext_value_p->option_value, |
| &(rule.src_mac_mask), sizeof(fal_mac_addr_t)); |
| } else if(!strcmp(ext_value_p->option_name, "ethernet_type")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &(tmpdata), sizeof(tmpdata)); |
| rule.ethtype_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_ETHTYPE); |
| } else if(!strcmp(ext_value_p->option_name, "ethernet_type_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &(tmpdata), sizeof(tmpdata)); |
| rule.ethtype_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_id")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.vid_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_VID); |
| } else if(!strcmp(ext_value_p->option_name, "vlan_id_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.vid_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "vlan_priority")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.up_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_UP); |
| } else if(!strcmp(ext_value_p->option_name, "vlan_priority_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.up_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "tagged")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.tagged_val = tmpdata; |
| rule.tagged_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_TAGGED); |
| } else if(!strcmp(ext_value_p->option_name, "tagged_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.tagged_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "cfi")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.cfi_val = tmpdata; |
| rule.cfi_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_CFI); |
| } else if(!strcmp(ext_value_p->option_name, "ctagged")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ctagged_val = tmpdata; |
| rule.ctagged_mask = BITS(0,3); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_CTAGGED); |
| } else if(!strcmp(ext_value_p->option_name, "ctag_vlan_id")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &(tmpdata), sizeof(tmpdata)); |
| rule.ctag_vid_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_CTAG_VID); |
| } else if(!strcmp(ext_value_p->option_name, "ctag_vlan_id_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ctag_vid_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "ctag_vlan_priority")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ctag_pri_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_CTAG_PRI); |
| } else if(!strcmp(ext_value_p->option_name, "ctag_vlan_priority_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ctag_pri_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "ctag_cfi")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ctag_cfi_val = tmpdata; |
| rule.ctag_cfi_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_CTAG_CFI); |
| } else if(!strcmp(ext_value_p->option_name, "stagged")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.stagged_val = tmpdata; |
| rule.stagged_mask = BITS(0,3); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_STAGGED); |
| } else if(!strcmp(ext_value_p->option_name, "stag_vlan_id")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.stag_vid_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_STAG_VID); |
| } else if(!strcmp(ext_value_p->option_name, "stag_vlan_id_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.stag_vid_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "stag_vlan_priority")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.stag_pri_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_STAG_PRI); |
| } else if(!strcmp(ext_value_p->option_name, "stag_vlan_priority_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &(tmpdata), sizeof(tmpdata)); |
| rule.stag_pri_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "stag_dei")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.stag_dei_val = tmpdata; |
| rule.stag_dei_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_MAC_STAG_DEI); |
| } else if(!strcmp(ext_value_p->option_name, "ipv4_src_address")) { |
| cmd_data_check_ip4addr((char*)ext_value_p->option_value, |
| &(rule.src_ip4_val), 4); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_IP4_SIP); |
| } else if(!strcmp(ext_value_p->option_name, "ipv4_src_address_mask")) { |
| cmd_data_check_ip4addr((char*)ext_value_p->option_value, |
| &(rule.src_ip4_mask), 4); |
| } else if(!strcmp(ext_value_p->option_name, "ipv4_dst_address")) { |
| cmd_data_check_ip4addr((char*)ext_value_p->option_value, |
| &(rule.dest_ip4_val), 4); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_IP4_DIP); |
| } else if(!strcmp(ext_value_p->option_name, "ipv4_dst_address_mask")) { |
| cmd_data_check_ip4addr((char*)ext_value_p->option_value, |
| &(rule.dest_ip4_mask), 4); |
| } else if(!strcmp(ext_value_p->option_name, "ipv6_src_address")) { |
| cmd_data_check_ip6addr((char*)ext_value_p->option_value, |
| &(rule.src_ip6_val), 16); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_IP6_SIP); |
| } else if(!strcmp(ext_value_p->option_name, "ipv6_src_address_mask")) { |
| cmd_data_check_ip6addr((char*)ext_value_p->option_value, |
| &(rule.src_ip6_mask), 16); |
| } else if(!strcmp(ext_value_p->option_name, "ipv6_dst_address")) { |
| cmd_data_check_ip6addr((char*)ext_value_p->option_value, |
| &(rule.dest_ip6_val), 16); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_IP6_DIP); |
| } else if(!strcmp(ext_value_p->option_name, "ipv6_dst_address_mask")) { |
| cmd_data_check_ip6addr((char*)ext_value_p->option_value, |
| &(rule.dest_ip6_mask), 16); |
| } else if(!strcmp(ext_value_p->option_name, "ipv6_flow_label")) { |
| cmd_data_check_uint32((char*)ext_value_p->option_value, |
| &(rule.ip6_lable_val), |
| sizeof(rule.ip6_lable_val)); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_IP6_LABEL); |
| } else if(!strcmp(ext_value_p->option_name, "ipv6_flow_label_mask")) { |
| cmd_data_check_uint32((char*)ext_value_p->option_value, |
| &(rule.ip6_lable_mask), |
| sizeof(rule.ip6_lable_mask)); |
| } else if(!strcmp(ext_value_p->option_name, "ip_protocol")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ip_proto_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_IP_PROTO); |
| } else if(!strcmp(ext_value_p->option_name, "ip_protocol_mask")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ip_proto_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "ip_dscp")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ip_dscp_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_IP_DSCP); |
| } else if(!strcmp(ext_value_p->option_name, "ip_dscp_mask")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ip_dscp_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "ip_dst_port")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.dest_l4port_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_L4_DPORT); |
| rule.dest_l4port_op = FAL_ACL_FIELD_MASK; |
| } else if(!strcmp(ext_value_p->option_name, "ip_dst_port_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.dest_l4port_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "ip_src_port")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.src_l4port_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_L4_SPORT); |
| rule.src_l4port_op = FAL_ACL_FIELD_MASK; |
| } else if(!strcmp(ext_value_p->option_name, "ip_src_port_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.src_l4port_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "icmp_type")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.icmp_type_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_ICMP_TYPE); |
| } else if(!strcmp(ext_value_p->option_name, "icmp_type_mask")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.icmp_type_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "icmp_code")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.icmp_code_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_ICMP_CODE); |
| } else if(!strcmp(ext_value_p->option_name, "icmp_code_mask")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.icmp_code_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "tcp_flag")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.tcp_flag_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_TCP_FLAG); |
| } else if(!strcmp(ext_value_p->option_name, "tcp_flag_mask")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.tcp_flag_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "ripv1")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ripv1_val = tmpdata; |
| rule.ripv1_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_RIPV1); |
| } else if(!strcmp(ext_value_p->option_name, "dhcpv4")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.dhcpv4_val = tmpdata; |
| rule.dhcpv4_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_DHCPV4); |
| } else if(!strcmp(ext_value_p->option_name, "dhcpv6")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.dhcpv6_val = tmpdata; |
| rule.dhcpv6_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_DHCPV6); |
| } else if(!strcmp(ext_value_p->option_name, "udf_start")) { |
| cmd_data_check_udf_type((char*)ext_value_p->option_value, |
| &rule.udf_type, sizeof(rule.udf_type)); |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_UDF); |
| } else if(!strcmp(ext_value_p->option_name, "udf_offset")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.udf_offset = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "udf_length")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.udf_len = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "udf_value")) { |
| tmpdata = sizeof(rule.udf_val); |
| cmd_data_check_udf_element((char*)ext_value_p->option_value, |
| (a_uint8_t *)&rule.udf_val, (a_uint32_t *)&tmpdata); |
| } else if(!strcmp(ext_value_p->option_name, "udf_mask")) { |
| tmpdata = sizeof(rule.udf_mask); |
| cmd_data_check_udf_element((char*)ext_value_p->option_value, |
| (a_uint8_t *)&rule.udf_mask, (a_uint32_t *)&tmpdata); |
| } else if(!strcmp(ext_value_p->option_name, "is_ip")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_ip_val), sizeof(rule.is_ip_val)); |
| rule.is_ip_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_IP); |
| } else if(!strcmp(ext_value_p->option_name, "is_ip6")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_ipv6_val), sizeof(rule.is_ipv6_val)); |
| rule.is_ipv6_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_IPV6); |
| } else if(!strcmp(ext_value_p->option_name, "is_fakemacheader")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_fake_mac_header_val), sizeof(rule.is_fake_mac_header_val)); |
| rule.is_fake_mac_header_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_FAKE_MAC_HEADER); |
| } else if(!strcmp(ext_value_p->option_name, "is_snap")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_snap_val), sizeof(rule.is_snap_val)); |
| rule.is_snap_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_SNAP); |
| } else if(!strcmp(ext_value_p->option_name, "is_ethernet")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_ethernet_val), sizeof(rule.is_ethernet_val)); |
| rule.is_ethernet_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_ETHERNET); |
| } else if(!strcmp(ext_value_p->option_name, "is_fragment")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_fragement_val), sizeof(rule.is_fragement_val)); |
| rule.is_fragement_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_L3_FRAGMENT); |
| } else if(!strcmp(ext_value_p->option_name, "is_ahheader")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_ah_header_val), sizeof(rule.is_ah_header_val)); |
| rule.is_ah_header_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_AH_HEADER); |
| } else if(!strcmp(ext_value_p->option_name, "is_espheader")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_esp_header_val), sizeof(rule.is_esp_header_val)); |
| rule.is_esp_header_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_ESP_HEADER); |
| } else if(!strcmp(ext_value_p->option_name, "is_mobilityheader")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_mobility_header_val), sizeof(rule.is_mobility_header_val)); |
| rule.is_mobility_header_val = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_MOBILITY_HEADER); |
| } else if(!strcmp(ext_value_p->option_name, "is_fragmentheader")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_fragment_header_val), sizeof(rule.is_fragment_header_val)); |
| rule.is_fragment_header_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_FRAGMENT_HEADER); |
| } else if(!strcmp(ext_value_p->option_name, "is_otherheader")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_other_header_val), sizeof(rule.is_other_header_val)); |
| rule.is_other_header_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_OTHER_EXT_HEADER); |
| } else if(!strcmp(ext_value_p->option_name, "is_ip4option")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_ipv4_option_val), sizeof(rule.is_ipv4_option_val)); |
| rule.is_ipv4_option_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_IPV4_OPTION); |
| } else if(!strcmp(ext_value_p->option_name, "is_firstfragment")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.is_first_frag_val), sizeof(rule.is_first_frag_val)); |
| rule.is_first_frag_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_FIRST_FRAGMENT); |
| } else if(!strcmp(ext_value_p->option_name, "vsi_valid")) { |
| cmd_data_check_confirm((char*)ext_value_p->option_value, A_FALSE, |
| &(rule.vsi_valid), sizeof(rule.vsi_valid)); |
| rule.vsi_mask = 1; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_VSI_VALID); |
| } else if(!strcmp(ext_value_p->option_name, "vsi")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.vsi = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_VSI); |
| } else if(!strcmp(ext_value_p->option_name, "vsi_mask")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.vsi_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "pppoe_session_id")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.pppoe_sessionid = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_PPPOE_SESSIONID); |
| } else if(!strcmp(ext_value_p->option_name, "pppoe_session_id_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.pppoe_sessionid_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "l3ttl")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.l3_ttl = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_L3_TTL); |
| } else if(!strcmp(ext_value_p->option_name, "l3ttl_mask")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.l3_ttl_mask= tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "l3length")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.l3_length = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_L3_LENGTH); |
| } else if(!strcmp(ext_value_p->option_name, "l3length_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.l3_length_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "l3packettype")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.l3_pkt_type = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_IP_PKT_TYPE); |
| } else if(!strcmp(ext_value_p->option_name, "l3packettype_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.l3_pkt_type_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_op0")) { |
| fal_acl_field_op_t op = FAL_ACL_FIELD_MASK; |
| cmd_data_check_fieldop((char*)ext_value_p->option_value, |
| FAL_ACL_FIELD_MASK, &op); |
| printk("%s, %d", (char*)ext_value_p->option_value, op); |
| rule.udf0_op= op; |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_val0")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.udf0_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_UDF0); |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_val0_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.udf0_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_op1")) { |
| fal_acl_field_op_t op = FAL_ACL_FIELD_MASK; |
| cmd_data_check_fieldop((char*)ext_value_p->option_value, |
| FAL_ACL_FIELD_MASK, &op); |
| rule.udf1_op= op; |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_val1")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.udf1_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_UDF1); |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_val1_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.udf1_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_val2")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.udf2_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_UDF2); |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_val2_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.udf2_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_val3")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.udf3_val = tmpdata; |
| FAL_FIELD_FLG_SET(rule.field_flg, FAL_ACL_FIELD_UDF3); |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_val3_mask")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.udf3_mask = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "inverse_check_fields")) { |
| if (!strcmp(ext_value_p->option_value, "y") || |
| !strcmp(ext_value_p->option_value, "yes")) { |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_INVERSE_ALL); |
| } else if(!strcmp(ext_value_p->option_value, "n") || |
| !strcmp(ext_value_p->option_value, "no")) { |
| FAL_FIELD_FLG_CLR(rule.field_flg, |
| FAL_ACL_FIELD_INVERSE_ALL); |
| } |
| } else if(!strcmp(ext_value_p->option_name, "packet_drop")) { |
| if(!strcmp(ext_value_p->option_value, "y") || |
| !strcmp(ext_value_p->option_value, "yes")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_DENY); |
| } else if(!strcmp(ext_value_p->option_value, "n") || |
| !strcmp(ext_value_p->option_value, "no")){ |
| FAL_ACTION_FLG_CLR(rule.action_flg, |
| FAL_ACL_ACTION_DENY); |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_PERMIT); |
| } |
| } else if(!strcmp(ext_value_p->option_name, "dscp_of_remark")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.dscp = tmpdata; |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_REMARK_DSCP); |
| } |
| #if defined(CPPE) |
| else if(!strcmp(ext_value_p->option_name, "dscp_of_remark_mask")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.dscp_mask = tmpdata; |
| } |
| #endif |
| else if(!strcmp(ext_value_p->option_name, "vlan_priority_of_remark")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.up = tmpdata; |
| } else if(!strcmp(ext_value_p->option_name, "queue_of_remark")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.queue = tmpdata; |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_REMARK_QUEUE); |
| } else if(!strcmp(ext_value_p->option_name, "port_bitmap")) { |
| cmd_data_check_pbmp((char*)ext_value_p->option_value, &portmap, 4); |
| } else if(!strcmp((char*)ext_value_p->option_name, "obj_type")) { |
| cmd_data_check_uint32((char*)ext_value_p->option_value, &obj_type, 4); |
| } else if(!strcmp((char*)ext_value_p->option_name, "obj_value")) { |
| cmd_data_check_uint32((char*)ext_value_p->option_value, &obj_value, 4); |
| } else if(!strcmp((char*)ext_value_p->option_name, "user_defined_field_value")) { |
| cmd_data_check_udf_element((char*)ext_value_p->option_value, |
| (a_uint8_t *)&(rule.udf_val[0]), (a_uint32_t *)&(rule.udf_len)); |
| FAL_FIELD_FLG_SET(rule.field_flg, |
| FAL_ACL_FIELD_UDF); |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_field_mask")) { |
| cmd_data_check_udf_element((char*)ext_value_p->option_value, |
| (a_uint8_t *)&(rule.udf_mask[0]), (a_uint32_t *)&(rule.udf_len)); |
| } else if(!strcmp(ext_value_p->option_name, "redirect_to_cpu")) { |
| if(!strcmp(ext_value_p->option_value, "y") || |
| !strcmp(ext_value_p->option_value, "yes")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_RDTCPU); |
| } else if(!strcmp(ext_value_p->option_value, "n") || |
| !strcmp(ext_value_p->option_value, "no")){ |
| FAL_ACTION_FLG_CLR(rule.action_flg, |
| FAL_ACL_ACTION_RDTCPU); |
| } |
| } else if(!strcmp(ext_value_p->option_name, "copy_to_cpu")) { |
| if(!strcmp(ext_value_p->option_value, "y") || |
| !strcmp(ext_value_p->option_value, "yes")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_CPYCPU); |
| } else if(!strcmp(ext_value_p->option_value, "n") || |
| !strcmp(ext_value_p->option_value, "no")){ |
| FAL_ACTION_FLG_CLR(rule.action_flg, |
| FAL_ACL_ACTION_CPYCPU); |
| } |
| } else if(!strcmp(ext_value_p->option_name, "redirect_to_ports")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_REDPT); |
| cmd_data_check_pbmp((char*)ext_value_p->option_value, &rule.ports, 4); |
| } else if(!strcmp(ext_value_p->option_name, "mirror")) { |
| if(!strcmp(ext_value_p->option_value, "y") || |
| !strcmp(ext_value_p->option_value, "yes")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_MIRROR); |
| } else if(!strcmp(ext_value_p->option_value, "n") || |
| !strcmp(ext_value_p->option_value, "no")){ |
| FAL_ACTION_FLG_CLR(rule.action_flg, |
| FAL_ACL_ACTION_MIRROR); |
| } |
| } else if(!strcmp(ext_value_p->option_name, "remark_lookup_vid")) { |
| if(!strcmp(ext_value_p->option_value, "y") || |
| !strcmp(ext_value_p->option_value, "yes")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_REMARK_LOOKUP_VID); |
| } else if(!strcmp(ext_value_p->option_value, "n") || |
| !strcmp(ext_value_p->option_value, "no")){ |
| FAL_ACTION_FLG_CLR(rule.action_flg, |
| FAL_ACL_ACTION_REMARK_LOOKUP_VID); |
| } |
| } else if(!strcmp(ext_value_p->option_name, "stag_vid_of_remark")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_REMARK_STAG_VID); |
| cmd_data_check_uint16((char*)ext_value_p->option_value, (a_uint32_t *)&rule.stag_vid, 4); |
| } else if(!strcmp(ext_value_p->option_name, "stag_priority_of_remark")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_REMARK_STAG_PRI); |
| cmd_data_check_uint16((char*)ext_value_p->option_value, (a_uint32_t *)&rule.stag_pri, 4); |
| } else if(!strcmp(ext_value_p->option_name, "stag_dei_of_remark")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_REMARK_STAG_DEI); |
| cmd_data_check_uint16((char*)ext_value_p->option_value, (a_uint32_t *)&rule.stag_dei, 4); |
| } else if(!strcmp(ext_value_p->option_name, "ctag_vid_of_remark")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_REMARK_CTAG_VID); |
| cmd_data_check_uint16((char*)ext_value_p->option_value, (a_uint32_t *)&rule.ctag_vid, 4); |
| } else if(!strcmp(ext_value_p->option_name, "ctag_priority_of_remark")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_REMARK_CTAG_PRI); |
| cmd_data_check_uint16((char*)ext_value_p->option_value, (a_uint32_t *)&rule.ctag_pri, 4); |
| } else if(!strcmp(ext_value_p->option_name, "ctag_cfi_of_remark")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_REMARK_CTAG_CFI); |
| cmd_data_check_uint16((char*)ext_value_p->option_value, (a_uint32_t *)&rule.ctag_cfi, 4); |
| } else if(!strcmp(ext_value_p->option_name, "action_policer_id")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| (a_uint32_t *)&(rule.policer_ptr), sizeof(a_uint32_t)); |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_POLICER_EN); |
| } else if(!strcmp(ext_value_p->option_name, "action_arp_ptr")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| (a_uint32_t *)&(rule.arp_ptr), sizeof(a_uint32_t)); |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_ARP_EN); |
| } else if(!strcmp(ext_value_p->option_name, "action_wcmp_ptr")) { |
| cmd_data_check_uint16((char*)ext_value_p->option_value, |
| (a_uint32_t *)&(rule.wcmp_ptr), sizeof(a_uint32_t)); |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_WCMP_EN); |
| } else if(!strcmp(ext_value_p->option_name, "action_snat")) { |
| if(!strcmp(ext_value_p->option_value, "y") || |
| !strcmp(ext_value_p->option_value, "yes")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_POLICY_FORWARD_EN); |
| rule.policy_fwd |= FAL_ACL_POLICY_SNAT; |
| } else if(!strcmp(ext_value_p->option_value, "n") || |
| !strcmp(ext_value_p->option_value, "no")){ |
| rule.policy_fwd &= ~ FAL_ACL_POLICY_SNAT; |
| } |
| } else if(!strcmp(ext_value_p->option_name, "action_dnat")) { |
| if(!strcmp(ext_value_p->option_value, "y") || |
| !strcmp(ext_value_p->option_value, "yes")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_POLICY_FORWARD_EN); |
| rule.policy_fwd |= FAL_ACL_POLICY_DNAT; |
| } else if(!strcmp(ext_value_p->option_value, "n") || |
| !strcmp(ext_value_p->option_value, "no")){ |
| rule.policy_fwd &= ~ FAL_ACL_POLICY_DNAT; |
| } |
| } else if(!strcmp(ext_value_p->option_name, "bypass_egress_translation")) { |
| if(!strcmp(ext_value_p->option_value, "y") || |
| !strcmp(ext_value_p->option_value, "yes")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_BYPASS_EGRESS_TRANS); |
| } else if(!strcmp(ext_value_p->option_value, "n") || |
| !strcmp(ext_value_p->option_value, "no")){ |
| FAL_ACTION_FLG_CLR(rule.action_flg, |
| FAL_ACL_ACTION_BYPASS_EGRESS_TRANS); |
| } |
| } else if(!strcmp(ext_value_p->option_name, "interrupt_trigger")) { |
| if(!strcmp(ext_value_p->option_value, "y") || |
| !strcmp(ext_value_p->option_value, "yes")) { |
| FAL_ACTION_FLG_SET(rule.action_flg, |
| FAL_ACL_ACTION_MATCH_TRIGGER_INTR); |
| } else if(!strcmp(ext_value_p->option_value, "n") || |
| !strcmp(ext_value_p->option_value, "no")){ |
| FAL_ACTION_FLG_CLR(rule.action_flg, |
| FAL_ACL_ACTION_MATCH_TRIGGER_INTR); |
| } |
| } else if(!strcmp(ext_value_p->option_name, "bypass_bitmap")) { |
| cmd_data_check_uint32((char*)ext_value_p->option_value, |
| &(rule.bypass_bitmap), sizeof(rule.bypass_bitmap)); |
| } else if(!strcmp(ext_value_p->option_name, "enqueue_priority")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.enqueue_pri = tmpdata; |
| FAL_ACTION_FLG_SET(rule.action_flg, FAL_ACL_ACTION_ENQUEUE_PRI); |
| } else if(!strcmp(ext_value_p->option_name, "stagformat")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.stag_fmt = tmpdata; |
| FAL_ACTION_FLG_SET(rule.action_flg, FAL_ACL_ACTION_REMARK_STAG_VID); |
| } else if(!strcmp(ext_value_p->option_name, "ctagformat")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.ctag_fmt = tmpdata; |
| FAL_ACTION_FLG_SET(rule.action_flg, FAL_ACL_ACTION_REMARK_CTAG_VID); |
| } else if(!strcmp(ext_value_p->option_name, "internaldropprec")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.int_dp = tmpdata; |
| FAL_ACTION_FLG_SET(rule.action_flg, FAL_ACL_ACTION_INT_DP); |
| } else if(!strcmp(ext_value_p->option_name, "servicecode")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.service_code= tmpdata; |
| FAL_ACTION_FLG_SET(rule.action_flg, FAL_ACL_ACTION_SERVICE_CODE); |
| } else if(!strcmp(ext_value_p->option_name, "cpucode")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.cpu_code = tmpdata; |
| FAL_ACTION_FLG_SET(rule.action_flg, FAL_ACL_ACTION_CPU_CODE); |
| } else if(!strcmp(ext_value_p->option_name, "metadata_en")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| if(tmpdata) |
| FAL_ACTION_FLG_SET(rule.action_flg, FAL_ACL_ACTION_METADATA_EN); |
| } else if(!strcmp(ext_value_p->option_name, "synctoggle")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| if(tmpdata) |
| FAL_ACTION_FLG_SET(rule.action_flg, FAL_ACL_ACTION_SYN_TOGGLE); |
| } |
| #if defined(CPPE) |
| else if(!strcmp(ext_value_p->option_name, "qos_res_prec")) { |
| cmd_data_check_uint8((char*)ext_value_p->option_value, |
| &tmpdata, sizeof(tmpdata)); |
| rule.qos_res_prec = tmpdata; |
| } |
| #endif |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| /*to be compatible with previous version which didn't define list id*/ |
| if(0xffffffff == list_id) { |
| list_id = rule_id; |
| rule_id = 0; |
| } else { |
| rule.pri = prio & 0x7; |
| prio = (prio >> 3) & 0x3f; |
| } |
| SSDK_DEBUG("uci set acl list %d, rule %d\n", list_id, rule_id); |
| SSDK_DEBUG("uci set acl portbitmap 0x%x, obj_type %d, obj_value %d\n", |
| portmap, obj_type, obj_value); |
| fal_acl_list_creat(dev_id, list_id, prio); |
| fal_acl_rule_add(dev_id, list_id, rule_id, 1, &rule); |
| /*bind to port bitmap*/ |
| if( portmap != 0 ) { |
| for (i = 0; i < AR8327_NUM_PORTS; i++) { |
| fal_acl_list_unbind(dev_id, list_id, 0, 0, i); |
| if (portmap & (0x1 << i)) { |
| rv = fal_acl_list_bind(dev_id, list_id, 0, 0, i); |
| if(rv != SW_OK){ |
| SSDK_ERROR("uci set acl fail %d\n", rv); |
| } |
| } |
| } |
| } else { |
| rv = fal_acl_list_bind(dev_id, list_id, 0, obj_type, obj_value); |
| if(rv != SW_OK){ |
| SSDK_ERROR("uci set acl fail %d\n", rv); |
| } |
| } |
| fal_acl_status_set(dev_id, A_TRUE); |
| |
| return rv; |
| } |
| |
| static int |
| parse_acl_udfprofile(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_type")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_offset")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "user_defined_length")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_acl_udf(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "packet_type")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "index")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "user_defined_type")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "user_defined_offset")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| #endif |
| |
| #ifdef IN_FLOW |
| static int |
| parse_flow_entry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "add_mode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "entrytype")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "host_addr_type")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "host_addr_index")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "protocol")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "age")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "srcintf_valid")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "srcintf_index")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "fwdtype")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "snat_nexthop")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "snat_srcport")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dnat_nexthop")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dnat_dstport")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "route_nexthop")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "portvalid")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "routeport")) { |
| val_ptr[16] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "bridgeport")) { |
| val_ptr[17] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "deacclr_en")) { |
| val_ptr[18] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "copy_tocpu_en")) { |
| val_ptr[19] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "syntoggle")) { |
| val_ptr[20] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "priprofile")) { |
| val_ptr[21] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sevicecode")) { |
| val_ptr[22] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "iptype")) { |
| val_ptr[23] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4addr")) { |
| val_ptr[26] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "srcport")) { |
| val_ptr[24] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dstport")) { |
| val_ptr[25] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tree_id")) { |
| val_ptr[27] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_flow_status(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "status")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_flow_age(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "agetime")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ageunit")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_flow_mgmt(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "flowtype")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "flowdirection")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "flow_miss_action")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "frag_bypass_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tcp_specific_bypass_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "all_bypass_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "keysel")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_flow_host(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "add_mode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "entry_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "entrytype")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "host_addr_type")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "host_addr_index")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "protocol")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "age")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "srcintf_valid")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "srcintf_index")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "fwdtype")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "snat_nexthop")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "snat_srcport")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dnat_nexthop")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dnat_dstport")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "route_nexthop")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "portvalid")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "routeport")) { |
| val_ptr[16] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "bridgeport")) { |
| val_ptr[17] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "deacclr_en")) { |
| val_ptr[18] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "copy_tocpu_en")) { |
| val_ptr[19] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "syntoggle")) { |
| val_ptr[20] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "priprofile")) { |
| val_ptr[21] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sevicecode")) { |
| val_ptr[22] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "iptype")) { |
| val_ptr[23] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip4addr")) { |
| val_ptr[26] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "srcport")) { |
| val_ptr[24] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dstport")) { |
| val_ptr[25] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "tree_id")) { |
| val_ptr[27] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ipentry_id")) { |
| val_ptr[28] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "entry_flags")) { |
| val_ptr[29] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "entry_status")) { |
| val_ptr[30] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip_addr")) { |
| val_ptr[31] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mac_addr")) { |
| val_ptr[32] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "interface_id")) { |
| val_ptr[33] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "load_balance_num")) { |
| val_ptr[34] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vrf_id")) { |
| val_ptr[35] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[36] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "action")) { |
| val_ptr[37] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mirror")) { |
| val_ptr[38] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "counter")) { |
| val_ptr[39] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "destinfo")) { |
| val_ptr[40] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip_synctoggle")) { |
| val_ptr[41] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "lan_wan")) { |
| val_ptr[42] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_flow_global(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "srcif_check_action")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "srcif_check_deacclr_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "service_loop_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "service_loop_action")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "service_loop_deacclr_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "flow_deacclr_action")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sync_mismatch_action")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sync_mismatch_deacclr_en")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_mode_0")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hash_mode_1")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_BM |
| static int |
| parse_bm_ctrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "enable")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_bm_portgroupmap(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "group_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_bm_groupbuff(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "group_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "bufnum")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_bm_portrsvbuff(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "prealloc_bufnum")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "react_bufnum")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_bm_portsthresh(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "maxthreshold")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "resume_offset")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_bm_portdthresh(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "weight")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sharedceiling")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "resumeoffset")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "resume_min_threshold")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| #endif |
| |
| #ifdef IN_QM |
| static int |
| parse_qm_ucastqbase(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "srcprofile")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "servicecode_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "servicecode")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cpucode_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cpucode")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "destport")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuebase")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "profile")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_ucastpriclass(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "profile")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "priority")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "class")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_mcastpriclass(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "priority")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "class")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_queue(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_ucasthash(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "profile")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "rsshash")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "queuehash")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_ucastdflthash(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "queuevalue")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_mcastcpucode(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "cpucode")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "class")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_acctrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "type")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "obj_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "admis_ctrl_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "admis_flowctrl_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_acprebuffer(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "type")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "obj_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "bufnum")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_acqgroup(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "group_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_acsthresh(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "type")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "obj_id")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "color_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "wred_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "greenmax")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "green_min_offset")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "yel_max_offset")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "yel_min_offset")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "red_max_offset")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "red_min_offset")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "green_resume_offset")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "yel_resume_offset")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "red_resume_offset")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_acdthresh(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "color_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "wred_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sharedweight")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "green_min_offset")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "yel_max_offset")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "yel_min_offset")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "red_max_offset")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "red_min_offset")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "green_resume_off")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "yel_resume_offset")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "red_resume_offset")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ceiling")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_acgbuff(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "group_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "prealloc_bufnum")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "total_bufnum")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_cntctrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "cnt_en")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_cnt(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_enqueue(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "enqueue_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_qm_srcprofile(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sourceprofile")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| #endif |
| |
| #ifdef IN_SERVCODE |
| static int |
| parse_servcode_config(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "servcode_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "destport_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "destport_id")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "bypass_bitmap_0")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "bypass_bitmap_1")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "bypass_bitmap_2")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "direction")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "field_update_bitmap")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "next_servicecode")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "hardwareservices")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "offsetselection")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_servcode_loopcheck(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "loopcheck_en")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_CTRLPKT |
| static int |
| parse_ctrlpkt_ethernettype(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "profile_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ethernettype")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ctrlpkt_rfdb(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "profile_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "rfdb_macaddr")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_ctrlpkt_appprofile(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_bitmap")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ethtype_profile_bitmap")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "rfdb_profile_bitmap")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "eapol_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "pppoe_en")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "igmp_en")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "arp_request_en")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "arp_reponse_en")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dhcp4_en")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "dhcp6_en")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "mld_en")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6ns_en")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ip6na_en")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ctrlpkt_profile_action")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "sourceguard_bypass")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "l2filter_bypass")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ingress_stp_bypass")) { |
| val_ptr[16] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "ingress_vlan_filter_bypass")) { |
| val_ptr[17] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_POLICER |
| static int |
| parse_policer_timeslot(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "timeslot")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_policer_fcscompensation(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "fcscompensation_length")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_policer_portentry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "policer_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "coupling_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "colormode")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "frametype")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "metermode")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "meterunit")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cir")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cbs")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eir")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ebs")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_priremark_en")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_dropprec_remark_en")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_pcpremark_en")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_deiremark_en")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellowpri")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_dropprec")) { |
| val_ptr[16] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellowpcp")) { |
| val_ptr[17] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellowdei")) { |
| val_ptr[18] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "redaction")) { |
| val_ptr[19] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_priremark_en")) { |
| val_ptr[20] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_dropprec_remark_en")) { |
| val_ptr[21] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_pcpremark_en")) { |
| val_ptr[22] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_deiremark_en")) { |
| val_ptr[23] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "redpri")) { |
| val_ptr[24] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_dropprec")) { |
| val_ptr[25] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "redpcp")) { |
| val_ptr[26] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "reddei")) { |
| val_ptr[27] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_policer_aclentry(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "index")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "policer_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "coupling_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "colormode")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "metermode")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "meterunit")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cir")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cbs")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eir")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ebs")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_priremark_en")) { |
| val_ptr[10] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_dropprec_remark_en")) { |
| val_ptr[11] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_pcpremark_en")) { |
| val_ptr[12] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_deiremark_en")) { |
| val_ptr[13] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellowpri")) { |
| val_ptr[14] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellow_dropprec")) { |
| val_ptr[15] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellowpcp")) { |
| val_ptr[16] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "yellowdei")) { |
| val_ptr[17] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "redaction")) { |
| val_ptr[18] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_priremark_en")) { |
| val_ptr[19] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_dropprec_remark_en")) { |
| val_ptr[20] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_pcpremark_en")) { |
| val_ptr[21] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_deiremark_en")) { |
| val_ptr[22] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "redpri")) { |
| val_ptr[23] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "red_dropprec")) { |
| val_ptr[24] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "redpcp")) { |
| val_ptr[25] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "reddei")) { |
| val_ptr[26] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_policer_bypass(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "frame_type")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "bypass_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| #endif |
| |
| #ifdef IN_SHAPER |
| static int |
| parse_shaper_porttimeslot(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "timeslot")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_shaper_flowtimeslot(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "timeslot")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_shaper_queuetimeslot(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "timeslot")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_shaper_ipgcompensation(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "ipgcompensation_length")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_shaper_porttoken(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ctoken_negative_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ctokennum")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_shaper_flowtoken(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "flow_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ctoken_negative_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ctokennum")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "etoken_negative_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "etokennum")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_shaper_queuetoken(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ctoken_negative_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ctokennum")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "etoken_negative_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "etokennum")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_shaper_portshaper(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "meterunit")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cshaper_en")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cir")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cbs")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "framemode")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_shaper_queueshaper(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "queue_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "coupling_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "meterunit")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cshaper_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cir")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cbs")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eshaper_en")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eir")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ebs")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "framemode")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_shaper_flowshaper(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| switch_ext_p = val->value.ext_val; |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if(!strcmp(ext_value_p->option_name, "flow_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "coupling_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "meterunit")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cshaper_en")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cir")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "cbs")) { |
| val_ptr[5] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eshaper_en")) { |
| val_ptr[6] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "eir")) { |
| val_ptr[7] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "ebs")) { |
| val_ptr[8] = (char*)ext_value_p->option_value; |
| } else if(!strcmp(ext_value_p->option_name, "framemode")) { |
| val_ptr[9] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_QOS |
| static int |
| parse_qos(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| #ifndef IN_QOS_MINI |
| if(!strcmp(command_name, "QTxBufSts")) { |
| rv = parse_qos_qtxbufsts(val); |
| } else if(!strcmp(command_name, "QTxBufNr")) { |
| rv = parse_qos_qtxbufnr(val); |
| } else if(!strcmp(command_name, "PtTxBufSts")) { |
| rv = parse_qos_pttxbufsts(val); |
| } else if(!strcmp(command_name, "PtTxBufNr")) { |
| rv = parse_qos_pttxbufnr(val); |
| } else if(!strcmp(command_name, "PtRxBufNr")) { |
| rv = parse_qos_ptrxbufnr(val); |
| } else if(!strcmp(command_name, "PtRedEn")) { |
| rv = parse_qos_ptreden(val); |
| } else if(!strcmp(command_name, "PtMode")) { |
| rv = parse_qos_ptmode(val); |
| } else if(!strcmp(command_name, "PtModePri")) { |
| rv = parse_qos_ptmodepri(val); |
| } else if(!strcmp(command_name, "PtschMode")) { |
| rv = parse_qos_ptschmode(val); |
| } else if(!strcmp(command_name, "PtDefaultSpri")) { |
| rv = parse_qos_ptdefaultspri(val); |
| } else if(!strcmp(command_name, "PtDefaultCpri")) { |
| rv = parse_qos_ptdefaultcpri(val); |
| } else if(!strcmp(command_name, "PtFSpriSts")) { |
| rv = parse_qos_ptfsprists(val); |
| } else if(!strcmp(command_name, "PtFCpriSts")) { |
| rv = parse_qos_ptfcprists(val); |
| } else if(!strcmp(command_name, "PtQuRemark")) { |
| rv = parse_qos_ptquremark(val); |
| } else if (!strcmp(command_name, "Ptgroup")) { |
| rv = parse_qos_ptgroup(val); |
| } else if (!strcmp(command_name, "Ptpriprece")) { |
| rv = parse_qos_ptpri(val); |
| } else if (!strcmp(command_name, "Ptremark")) { |
| rv = parse_qos_ptremark(val); |
| } else if (!strcmp(command_name, "Pcpmap")) { |
| rv = parse_qos_pcpmap(val); |
| } else if (!strcmp(command_name, "Flowmap")) { |
| rv = parse_qos_flowmap(val); |
| } else if (!strcmp(command_name, "Dscpmap")) { |
| rv = parse_qos_dscpmap(val); |
| } else if (!strcmp(command_name, "Qscheduler")) { |
| rv = parse_qos_qscheduler(val); |
| } else if (!strcmp(command_name, "Ringqueue")) { |
| rv = parse_qos_ringqueue(val); |
| } else if (!strcmp(command_name, "Dequeue")) { |
| rv = parse_qos_dequeue(val); |
| } else if (!strcmp(command_name, "Portscheduler")) { |
| rv = parse_qos_portscheduler(val); |
| } |
| #endif |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_COSMAP |
| static int |
| parse_cos(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Pri2Q")) { |
| rv = parse_cos_mappri2q(val); |
| } else if(!strcmp(command_name, "Pri2Ehq")) { |
| rv = parse_cos_mappri2ehq(val); |
| } |
| #ifndef IN_COSMAP_MINI |
| else if(!strcmp(command_name, "Dscp2Pri")) { |
| rv = parse_cos_mapdscp2pri(val); |
| } else if(!strcmp(command_name, "Dscp2Dp")) { |
| rv = parse_cos_mapdscp2dp(val); |
| } else if(!strcmp(command_name, "Up2Pri")) { |
| rv = parse_cos_mapup2pri(val); |
| } else if(!strcmp(command_name, "Up2Dp")) { |
| rv = parse_cos_mapup2dp(val); |
| } else if(!strcmp(command_name, "Dscp2ehPri")) { |
| rv = parse_cos_mapdscp2ehpri(val); |
| } else if(!strcmp(command_name, "Dscp2ehDp")) { |
| rv = parse_cos_mapdscp2ehdp(val); |
| } else if(!strcmp(command_name, "Up2ehPri")) { |
| rv = parse_cos_mapup2ehpri(val); |
| } else if(!strcmp(command_name, "Up2ehDp")) { |
| rv = parse_cos_mapup2ehdp(val); |
| } else if(!strcmp(command_name, "EgRemark")) { |
| rv = parse_cos_mapegremark(val); |
| } |
| #endif |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_RATE |
| static int |
| parse_rate(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "PortPolicer")) { |
| rv = parse_rate_portpolicer(val); |
| } else if(!strcmp(command_name, "PortShaper")) { |
| rv = parse_rate_portshaper(val); |
| } else if(!strcmp(command_name, "QueueShaper")) { |
| rv = parse_rate_queueshaper(val); |
| } else if(!strcmp(command_name, "AclPolicer")) { |
| rv = parse_rate_aclpolicer(val); |
| } else if(!strcmp(command_name, "PtAddRateByte")) { |
| rv = parse_rate_ptaddratebyte(val); |
| } else if(!strcmp(command_name, "PtGolflowen")) { |
| rv = parse_rate_ptgolflowen(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_PORTCONTROL |
| static int |
| parse_port(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "TxHdr")) { |
| rv = parse_port_txhdr(val); |
| } else if(!strcmp(command_name, "RxHdr")) { |
| rv = parse_port_rxhdr(val); |
| } else if(!strcmp(command_name, "HdrType")) { |
| rv = parse_port_hdrtype(val); |
| } |
| #ifndef IN_PORTCONTROL_MINI |
| else if(!strcmp(command_name, "Duplex")) { |
| rv = parse_port_duplex(val); |
| } else if(!strcmp(command_name, "Speed")) { |
| rv = parse_port_speed(val); |
| } else if(!strcmp(command_name, "AutoAdv")) { |
| rv = parse_port_autoadv(val); |
| } else if(!strcmp(command_name, "AutoNegEnable")) { |
| rv = parse_port_autonegenable(val); |
| } else if(!strcmp(command_name, "AutoNegRestart")) { |
| rv = parse_port_autonegrestart(val); |
| } else if(!strcmp(command_name, "FlowCtrl")) { |
| rv = parse_port_flowctrl(val); |
| } else if(!strcmp(command_name, "FlowCtrlForceMode")) { |
| rv = parse_port_flowctrlforcemode(val); |
| } else if(!strcmp(command_name, "PowerSave")) { |
| rv = parse_port_powersave(val); |
| } else if(!strcmp(command_name, "Hibernate")) { |
| rv = parse_port_hibernate(val); |
| } else if(!strcmp(command_name, "TxMacStatus")) { |
| rv = parse_port_txmacstatus(val); |
| } else if(!strcmp(command_name, "RxMacStatus")) { |
| rv = parse_port_rxmacstatus(val); |
| } else if(!strcmp(command_name, "TxFcStatus")) { |
| rv = parse_port_txfcstatus(val); |
| } else if(!strcmp(command_name, "RxFcStatus")) { |
| rv = parse_port_rxfcstatus(val); |
| } else if(!strcmp(command_name, "BpStatus")) { |
| rv = parse_port_bpstatus(val); |
| } else if(!strcmp(command_name, "LinkForceMode")) { |
| rv = parse_port_linkforcemode(val); |
| } else if(!strcmp(command_name, "MacLoopback")) { |
| rv = parse_port_macloopback(val); |
| } else if(!strcmp(command_name, "CongeDrop")) { |
| rv = parse_port_congedrop(val); |
| } else if(!strcmp(command_name, "RingFcThresh")) { |
| rv = parse_port_ringfcthresh(val); |
| } else if(!strcmp(command_name, "Ieee8023az")) { |
| rv = parse_port_ieee8023az(val); |
| } else if(!strcmp(command_name, "Crossover")) { |
| rv = parse_port_crossover(val); |
| } else if(!strcmp(command_name, "PreferMedium")) { |
| rv = parse_port_prefermedium(val); |
| } else if(!strcmp(command_name, "FiberMode")) { |
| rv = parse_port_fibermode(val); |
| } else if(!strcmp(command_name, "LocalLoopback")) { |
| rv = parse_port_localloopback(val); |
| } else if(!strcmp(command_name, "RemoteLoopback")) { |
| rv = parse_port_remoteloopback(val); |
| } else if(!strcmp(command_name, "MagicFrameMac")) { |
| rv = parse_port_magicframemac(val); |
| } else if(!strcmp(command_name, "Wolstatus")) { |
| rv = parse_port_wolstatus(val); |
| } else if(!strcmp(command_name, "InterfaceMode")) { |
| rv = parse_port_interfacemode(val); |
| } else if(!strcmp(command_name, "InterfaceModeApply")) { |
| rv = parse_port_interfacemodeapply(val); |
| } else if(!strcmp(command_name, "Poweron")) { |
| rv = parse_port_poweron(val); |
| } else if(!strcmp(command_name, "Poweroff")) { |
| rv = parse_port_poweroff(val); |
| } else if(!strcmp(command_name, "Reset")) { |
| rv = parse_port_reset(val); |
| } else if(!strcmp(command_name, "FrameMaxSize")) { |
| rv = parse_port_framemaxsize(val); |
| } else if(!strcmp(command_name, "Mtu")) { |
| rv = parse_port_mtu(val); |
| } else if(!strcmp(command_name, "Mru")) { |
| rv = parse_port_mru(val); |
| } else if(!strcmp(command_name, "Srcfilter")) { |
| rv = parse_port_srcfilter(val); |
| } else if(!strcmp(command_name, "Interface3az")) { |
| rv = parse_port_interface8023az(val); |
| } else if(!strcmp(command_name, "Promiscmode")) { |
| rv = parse_port_promiscmode(val); |
| } else if(!strcmp(command_name, "Eeecfg")) { |
| rv = parse_port_eeecfg(val); |
| }else if(!strcmp(command_name, "Srcfiltercfg")) { |
| rv = parse_port_srcfiltercfg(val); |
| } else if(!strcmp(command_name, "SwitchPortLoopback")) { |
| rv = parse_switch_port_loopback(val); |
| } |
| #endif |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_PORTVLAN |
| static int |
| parse_portvlan(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Ingress")) { |
| rv = parse_portvlan_ingress(val); |
| } else if(!strcmp(command_name, "Egress")) { |
| rv = parse_portvlan_egress(val); |
| } else if(!strcmp(command_name, "Member")) { |
| rv = parse_portvlan_member(val); |
| } else if(!strcmp(command_name, "ForceVid")) { |
| rv = parse_portvlan_forcevid(val); |
| } else if(!strcmp(command_name, "ForceMode")) { |
| rv = parse_portvlan_forcemode(val); |
| } else if(!strcmp(command_name, "SVlanTPID")) { |
| rv = parse_portvlan_svlantpid(val); |
| } else if(!strcmp(command_name, "DefaultSvid")) { |
| rv = parse_portvlan_defaultsvid(val); |
| } else if(!strcmp(command_name, "DefaultCvid")) { |
| rv = parse_portvlan_defaultcvid(val); |
| } else if (!strcmp(command_name, "GlobalQinQMode")) { |
| rv = parse_portvlan_globalqinqmode(val); |
| } else if (!strcmp(command_name, "PtQinQMode")) { |
| rv = parse_portvlan_ptqinqmode(val); |
| #ifdef HPPE |
| } else if (!strcmp(command_name, "InTpid")) { |
| rv = parse_portvlan_intpid(val); |
| } else if (!strcmp(command_name, "EgTpid")) { |
| rv = parse_portvlan_egtpid(val); |
| } else if (!strcmp(command_name, "IngressFilter")) { |
| rv = parse_portvlan_ingressfilter(val); |
| } else if (!strcmp(command_name, "DefaultVlanTag")) { |
| rv = parse_portvlan_defaultvlantag(val); |
| } else if (!strcmp(command_name, "TagPropagation")) { |
| rv = parse_portvlan_tagpropagation(val); |
| } else if (!strcmp(command_name, "TranslationMissAction")) { |
| rv = parse_portvlan_translationmissaction(val); |
| #endif |
| } else if (!strcmp(command_name, "EgMode")) { |
| rv = parse_portvlan_egmode(val); |
| #ifdef HPPE |
| } else if (!strcmp(command_name, "VsiEgMode")) { |
| rv = parse_portvlan_vsiegmode(val); |
| } else if (!strcmp(command_name, "VsiEgModeEn")) { |
| rv = parse_portvlan_vsiegmodeen(val); |
| } else if (!strcmp(command_name, "Counter")) { |
| rv = parse_portvlan_counter(val); |
| } else if (!strcmp(command_name, "TranslationAdv")) { |
| rv = parse_portvlan_translationadv(val); |
| #endif |
| } |
| #ifndef IN_PORTVLAN_MINI |
| else if(!strcmp(command_name, "InVlan")) { |
| rv = parse_portvlan_invlan(val); |
| } else if(!strcmp(command_name, "TlsMode")) { |
| rv = parse_portvlan_tlsmode(val); |
| } else if(!strcmp(command_name, "PriPropagation")) { |
| rv = parse_portvlan_pripropagation(val); |
| } else if(!strcmp(command_name, "VlanPropagation")) { |
| rv = parse_portvlan_vlanpropagation(val); |
| } else if(!strcmp(command_name, "Translation")) { |
| rv = parse_portvlan_translation(val); |
| } else if(!strcmp(command_name, "QinqMode")) { |
| rv = parse_portvlan_qinqmode(val); |
| } else if(!strcmp(command_name, "QinqRole")) { |
| rv = parse_portvlan_qinqrole(val); |
| } else if(!strcmp(command_name, "MacVlanXlt")) { |
| rv = parse_portvlan_macvlanxlt(val); |
| } else if(!strcmp(command_name, "Netiso")) { |
| rv = parse_portvlan_netiso(val); |
| } else if(!strcmp(command_name, "EgBypass")) { |
| rv = parse_portvlan_egbypass(val); |
| } else if(!strcmp(command_name, "Ptvrfid")) { |
| rv = parse_portvlan_ptvrfid(val); |
| } |
| #endif |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_VLAN |
| static int |
| parse_vlan(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Entry")) { |
| rv = parse_vlan_entry(val); |
| } else if(!strcmp(command_name, "Member")) { |
| rv = parse_vlan_member(val); |
| } |
| #ifndef IN_VLAN_MINI |
| else if(!strcmp(command_name, "LearnSts")) { |
| rv = parse_vlan_learnsts(val); |
| } |
| #endif |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_FDB |
| static int |
| parse_fdb(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "PortLearn")) { |
| rv = parse_fdb_portlearn(val); |
| } |
| #ifndef IN_FDB_MINI |
| else if(!strcmp(command_name, "Resventry")) { |
| rv = parse_fdb_resventry(val); |
| } else if(!strcmp(command_name, "Entry")) { |
| rv = parse_fdb_entry(val); |
| } else if(!strcmp(command_name, "AgeCtrl")) { |
| rv = parse_fdb_agectrl(val); |
| } else if(!strcmp(command_name, "AgeTime")) { |
| rv = parse_fdb_agetime(val); |
| } else if(!strcmp(command_name, "Vlansmode")) { |
| rv = parse_fdb_vlansmode(val); |
| } else if(!strcmp(command_name, "Ptlearnlimit")) { |
| rv = parse_fdb_ptlearnlimit(val); |
| } else if(!strcmp(command_name, "Ptlearnexceedcmd")) { |
| rv = parse_fdb_ptlearnexceedcmd(val); |
| } else if(!strcmp(command_name, "Learnlimit")) { |
| rv = parse_fdb_learnlimit(val); |
| } else if(!strcmp(command_name, "Learnexceedcmd")) { |
| rv = parse_fdb_learnexceedcmd(val); |
| } else if(!strcmp(command_name, "PtLearnstatic")) { |
| rv = parse_fdb_ptlearnstatic(val); |
| } else if (!strcmp(command_name, "LearnCtrl")) { |
| rv = parse_fdb_learnctrl(val); |
| } else if (!strcmp(command_name, "PtLearnCtrl")) { |
| rv = parse_fdb_ptlearnctrl(val); |
| } else if (!strcmp(command_name, "PtStationMove")) { |
| rv = parse_fdb_ptstationmove(val); |
| } else if (!strcmp(command_name, "PtMacLimitCtrl")) { |
| rv = parse_fdb_ptmaclimitctrl(val); |
| } |
| #endif |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_RSS_HASH |
| static int |
| parse_rsshash(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if (!strcmp(command_name, "Config")) { |
| rv = parse_rsshash_config(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_IGMP |
| static int |
| parse_igmp(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Mode")) { |
| rv = parse_igmp_mode(val); |
| } else if(!strcmp(command_name, "Cmd")) { |
| rv = parse_igmp_cmd(val); |
| } else if(!strcmp(command_name, "PortJoin")) { |
| rv = parse_igmp_portjoin(val); |
| } else if(!strcmp(command_name, "PortLeave")) { |
| rv = parse_igmp_portleave(val); |
| } else if(!strcmp(command_name, "Rp")) { |
| rv = parse_igmp_rp(val); |
| } else if(!strcmp(command_name, "CreateStatus")) { |
| rv = parse_igmp_createstatus(val); |
| } else if(!strcmp(command_name, "Static")) { |
| rv = parse_igmp_static(val); |
| } else if(!strcmp(command_name, "Leaky")) { |
| rv = parse_igmp_leaky(val); |
| } else if(!strcmp(command_name, "Version3")) { |
| rv = parse_igmp_version3(val); |
| } else if(!strcmp(command_name, "Queue")) { |
| rv = parse_igmp_queue(val); |
| } else if(!strcmp(command_name, "Ptlearnlimit")) { |
| rv = parse_igmp_ptlearnlimit(val); |
| } else if(!strcmp(command_name, "Ptlearnexceedcmd")) { |
| rv = parse_igmp_ptlearnexceedcmd(val); |
| } else if(!strcmp(command_name, "Multi")) { |
| rv = parse_igmp_multi(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_SEC |
| static int |
| parse_sec(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Mac")) { |
| rv = parse_sec_mac(val); |
| } else if(!strcmp(command_name, "Ip")) { |
| rv = parse_sec_ip(val); |
| } else if(!strcmp(command_name, "Ip4")) { |
| rv = parse_sec_ip4(val); |
| } else if(!strcmp(command_name, "Ip6")) { |
| rv = parse_sec_ip6(val); |
| } else if(!strcmp(command_name, "Tcp")) { |
| rv = parse_sec_tcp(val); |
| } else if(!strcmp(command_name, "Udp")) { |
| rv = parse_sec_udp(val); |
| } else if(!strcmp(command_name, "Icmp4")) { |
| rv = parse_sec_icmp4(val); |
| } else if(!strcmp(command_name, "Icmp6")) { |
| rv = parse_sec_icmp6(val); |
| #ifdef HPPE |
| } else if (!strcmp(command_name, "Expctrl")) { |
| rv = parse_sec_expctrl(val); |
| } else if (!strcmp(command_name, "L3parser")) { |
| rv = parse_sec_l3parser(val); |
| } else if (!strcmp(command_name, "L4parser")) { |
| rv = parse_sec_l4parser(val); |
| #endif |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_MISC |
| static int |
| parse_misc(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Eapolcmd")) { |
| rv = parse_misc_eapolcmd(val); |
| } else if(!strcmp(command_name, "Eapolstatus")) { |
| rv = parse_misc_eapolstatus(val); |
| } else if(!strcmp(command_name, "CpuPort")) { |
| rv = parse_misc_cpuport(val); |
| } else if(!strcmp(command_name, "PtUnkUcFilter")) { |
| rv = parse_misc_ptunkucfilter(val); |
| } else if(!strcmp(command_name, "PtUnkMcFilter")) { |
| rv = parse_misc_ptunkmcfilter(val); |
| } else if(!strcmp(command_name, "PtBcFilter")) { |
| rv = parse_misc_ptbcfilter(val); |
| } |
| #ifndef IN_MISC_MINI |
| else if(!strcmp(command_name, "CpuVid")) { |
| rv = parse_misc_cpuvid(val); |
| } else if(!strcmp(command_name, "FrameMaxSize")) { |
| rv = parse_misc_framemaxsize(val); |
| } else if(!strcmp(command_name, "AutoNeg")) { |
| rv = parse_misc_autoneg(val); |
| } else if(!strcmp(command_name, "PppoeCmd")) { |
| rv = parse_misc_pppoecmd(val); |
| } else if(!strcmp(command_name, "Pppoe")) { |
| rv = parse_misc_pppoe(val); |
| } else if(!strcmp(command_name, "PtDhcp")) { |
| rv = parse_misc_ptdhcp(val); |
| } else if(!strcmp(command_name, "Arpcmd")) { |
| rv = parse_misc_arpcmd(val); |
| } else if(!strcmp(command_name, "Rip")) { |
| rv = parse_misc_rip(val); |
| } else if(!strcmp(command_name, "Ptarpreq")) { |
| rv = parse_misc_ptarpreq(val); |
| } else if(!strcmp(command_name, "Ptarpack")) { |
| rv = parse_misc_ptarpack(val); |
| } else if(!strcmp(command_name, "Extendpppoe")) { |
| rv = parse_misc_extendpppoe(val); |
| } else if(!strcmp(command_name, "Pppoeid")) { |
| rv = parse_misc_pppoeid(val); |
| } else if(!strcmp(command_name, "RtdPppoe")) { |
| rv = parse_misc_rtdpppoe(val); |
| } else if(!strcmp(command_name, "GloMacAddr")) { |
| rv = parse_misc_glomacaddr(val); |
| } else if(!strcmp(command_name, "Framecrc")) { |
| rv = parse_misc_framecrc(val); |
| } else if(!strcmp(command_name, "Pppoeen")) { |
| rv = parse_misc_pppoeen(val); |
| } |
| #endif |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_IP |
| static int |
| parse_ip(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| #ifndef IN_IP_MINI |
| if(!strcmp(command_name, "Hostentry")) { |
| rv = parse_ip_hostentry(val); |
| } else if(!strcmp(command_name, "Intfentry")) { |
| rv = parse_ip_intfentry(val); |
| } else if(!strcmp(command_name, "Ptarplearn")) { |
| rv = parse_ip_ptarplearn(val); |
| } else if(!strcmp(command_name, "Arplearn")) { |
| rv = parse_ip_arplearn(val); |
| } else if(!strcmp(command_name, "Ptipsrcguard")) { |
| rv = parse_ip_ptipsrcguard(val); |
| } else if(!strcmp(command_name, "Ptarpsrcguard")) { |
| rv = parse_ip_ptarpsrcguard(val); |
| } else if(!strcmp(command_name, "Routestatus")) { |
| rv = parse_ip_routestatus(val); |
| } else if(!strcmp(command_name, "Ipunksrc")) { |
| rv = parse_ip_ipunksrc(val); |
| } else if(!strcmp(command_name, "Arpunksrc")) { |
| rv = parse_ip_arpunksrc(val); |
| } else if(!strcmp(command_name, "IpAgetime")) { |
| rv = parse_ip_agetime(val); |
| } else if(!strcmp(command_name, "Wcmphashmode")) { |
| rv = parse_ip_wcmphashmode(val); |
| } else if(!strcmp(command_name, "Defaultflowcmd")) { |
| rv = parse_ip_defaultflowcmd(val); |
| } else if(!strcmp(command_name, "Defaultrtflowcmd")) { |
| rv = parse_ip_defaultrtflowcmd(val); |
| } else if(!strcmp(command_name, "HostRoute")) { |
| rv = parse_ip_hostroute(val); |
| } else if(!strcmp(command_name, "DefaultRoute")) { |
| rv = parse_ip_defaultroute(val); |
| } else if(!strcmp(command_name, "Vrfbaseaddr")) { |
| rv = parse_ip_vrfbaseaddr(val); |
| } else if(!strcmp(command_name, "Vrfbasemask")) { |
| rv = parse_ip_vrfbasemask(val); |
| } else if(!strcmp(command_name, "Rfsip4")) { |
| rv = parse_ip_rfsip4(val); |
| } else if(!strcmp(command_name, "Rfsip6")) { |
| rv = parse_ip_rfsip6(val); |
| } else if (!strcmp(command_name, "Vsiarpsg")) { |
| rv = parse_ip_vsiarpsg(val); |
| } else if (!strcmp(command_name, "Vsisg")) { |
| rv = parse_ip_vsisg(val); |
| } else if (!strcmp(command_name, "Portarpsg")) { |
| rv = parse_ip_portarpsg(val); |
| } else if (!strcmp(command_name, "Portsg")) { |
| rv = parse_ip_portsg(val); |
| } else if (!strcmp(command_name, "Pubip")) { |
| rv = parse_ip_pubip(val); |
| } else if (!strcmp(command_name, "Networkroute")) { |
| rv = parse_ip_networkroute(val); |
| } else if (!strcmp(command_name, "Intf")) { |
| rv = parse_ip_intf(val); |
| } else if (!strcmp(command_name, "Vsiintf")) { |
| rv = parse_ip_vsiintf(val); |
| } else if (!strcmp(command_name, "Portintf")) { |
| rv = parse_ip_portintf(val); |
| } else if (!strcmp(command_name, "Nexthop")) { |
| rv = parse_ip_nexthop(val); |
| } else if (!strcmp(command_name, "Portmac")) { |
| rv = parse_ip_portmac(val); |
| } else if (!strcmp(command_name, "Routemiss")) { |
| rv = parse_ip_routemiss(val); |
| } else if (!strcmp(command_name, "Mcmode")) { |
| rv = parse_ip_mcmode(val); |
| } else if (!strcmp(command_name, "Globalctrl")) { |
| rv = parse_ip_globalctrl(val); |
| } else if (!strcmp(command_name, "Hostentry")) { |
| rv = parse_ip_hostentry(val); |
| } |
| #endif |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_NAT |
| static int |
| parse_nat(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Natentry")) { |
| rv = parse_nat_natentry(val); |
| } else if(!strcmp(command_name, "Naptentry")) { |
| rv = parse_nat_naptentry(val); |
| } else if(!strcmp(command_name, "Flowentry")) { |
| rv = parse_nat_flowentry(val); |
| } else if(!strcmp(command_name, "Flowcookie")) { |
| rv = parse_nat_flowcookie(val); |
| } else if(!strcmp(command_name, "Flowrfs")) { |
| rv = parse_nat_flowrfs(val); |
| } else if(!strcmp(command_name, "Natstatus")) { |
| rv = parse_nat_natstatus(val); |
| } else if(!strcmp(command_name, "Naptstatus")) { |
| rv = parse_nat_naptstatus(val); |
| } else if(!strcmp(command_name, "Nathash")) { |
| rv = parse_nat_nathash(val); |
| } else if(!strcmp(command_name, "Naptmode")) { |
| rv = parse_nat_naptmode(val); |
| } else if(!strcmp(command_name, "Prvbaseaddr")) { |
| rv = parse_nat_prvbaseaddr(val); |
| } else if(!strcmp(command_name, "Prvaddrmode")) { |
| rv = parse_nat_prvaddrmode(val); |
| } else if(!strcmp(command_name, "Pubaddr")) { |
| rv = parse_nat_pubaddr(val); |
| } else if(!strcmp(command_name, "Natunksess")) { |
| rv = parse_nat_natunksess(val); |
| } else if(!strcmp(command_name, "Prvbasemask")) { |
| rv = parse_nat_prvbasemask(val); |
| } else if(!strcmp(command_name, "Global")) { |
| rv = parse_nat_global(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_STP |
| static int |
| parse_stp(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "PortState")) { |
| rv = parse_stp_portstate(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_MIRROR |
| static int |
| parse_mirror(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "AnalyPt")) { |
| rv = parse_mirror_analypt(val); |
| } else if(!strcmp(command_name, "PtIngress")) { |
| rv = parse_mirror_ptingress(val); |
| } else if(!strcmp(command_name, "PtEgress")) { |
| rv = parse_mirror_ptegress(val); |
| } else if (!strcmp(command_name, "AnalyCfg")) { |
| rv = parse_mirror_analycfg(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_LEAKY |
| static int |
| parse_leaky(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "UcMode")) { |
| rv = parse_leaky_ucmode(val); |
| } else if(!strcmp(command_name, "McMode")) { |
| rv = parse_leaky_mcmode(val); |
| } else if(!strcmp(command_name, "ArpMode")) { |
| rv = parse_leaky_arpmode(val); |
| } else if(!strcmp(command_name, "PtUcMode")) { |
| rv = parse_leaky_ptucmode(val); |
| } else if(!strcmp(command_name, "PtMcMode")) { |
| rv = parse_leaky_ptmcmode(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_TRUNK |
| static int |
| parse_trunk(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Group")) { |
| rv = parse_trunk_group(val); |
| } else if(!strcmp(command_name, "Hashmode")) { |
| rv = parse_trunk_hashmode(val); |
| } else if (!strcmp(command_name, "Failover")) { |
| rv = parse_trunk_failover(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_MIB |
| static int |
| parse_mib(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Status")) { |
| rv = parse_mib_status(val); |
| } else if(!strcmp(command_name, "CpuKeep")) { |
| rv = parse_mib_cpukeep(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_ACL |
| static int |
| parse_acl(const char *command_name, struct switch_val *val, a_uint32_t dev_id) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Rule")) { |
| rv = parse_acl_rule(val, dev_id); |
| } else if(!strcmp(command_name, "Udfprofile")) { |
| rv = parse_acl_udfprofile(val); |
| } else if(!strcmp(command_name, "Udf")) { |
| rv = parse_acl_udf(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_FLOW |
| static int |
| parse_flow(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if (!strcmp(command_name, "Entry")) { |
| rv = parse_flow_entry(val); |
| } else if (!strcmp(command_name, "Status")) { |
| rv = parse_flow_status(val); |
| } else if (!strcmp(command_name, "Agetime")) { |
| rv = parse_flow_age(val); |
| } else if (!strcmp(command_name, "Mgmt")) { |
| rv = parse_flow_mgmt(val); |
| } else if (!strcmp(command_name, "Host")) { |
| rv = parse_flow_host(val); |
| } else if (!strcmp(command_name, "Global")) { |
| rv = parse_flow_global(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_BM |
| static int |
| parse_bm(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if (!strcmp(command_name, "Ctrl")) { |
| rv = parse_bm_ctrl(val); |
| } else if (!strcmp(command_name, "Portgroupmap")) { |
| rv = parse_bm_portgroupmap(val); |
| } else if (!strcmp(command_name, "Groupbuff")) { |
| rv = parse_bm_groupbuff(val); |
| } else if (!strcmp(command_name, "Portrsvbuff")) { |
| rv = parse_bm_portrsvbuff(val); |
| } else if (!strcmp(command_name, "Portsthresh")) { |
| rv = parse_bm_portsthresh(val); |
| } else if (!strcmp(command_name, "Portdthresh")) { |
| rv = parse_bm_portdthresh(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_QM |
| static int |
| parse_qm(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if (!strcmp(command_name, "Ucastqbase")) { |
| rv = parse_qm_ucastqbase(val); |
| } else if (!strcmp(command_name, "Ucastpriclass")) { |
| rv = parse_qm_ucastpriclass(val); |
| } else if (!strcmp(command_name, "Mcastpriclass")) { |
| rv = parse_qm_mcastpriclass(val); |
| } else if (!strcmp(command_name, "Queue")) { |
| rv = parse_qm_queue(val); |
| } else if (!strcmp(command_name, "Ucasthash")) { |
| rv = parse_qm_ucasthash(val); |
| } else if (!strcmp(command_name, "Ucastdflthash")) { |
| rv = parse_qm_ucastdflthash(val); |
| } else if (!strcmp(command_name, "Mcastcpucode")) { |
| rv = parse_qm_mcastcpucode(val); |
| } else if (!strcmp(command_name, "Acctrl")) { |
| rv = parse_qm_acctrl(val); |
| } else if (!strcmp(command_name, "Acprebuffer")) { |
| rv = parse_qm_acprebuffer(val); |
| } else if (!strcmp(command_name, "Acqgroup")) { |
| rv = parse_qm_acqgroup(val); |
| } else if (!strcmp(command_name, "Acstaticthresh")) { |
| rv = parse_qm_acsthresh(val); |
| } else if (!strcmp(command_name, "Acdynamicthresh")) { |
| rv = parse_qm_acdthresh(val); |
| } else if (!strcmp(command_name, "Acgroupbuff")) { |
| rv = parse_qm_acgbuff(val); |
| } else if (!strcmp(command_name, "Cntctrl")) { |
| rv = parse_qm_cntctrl(val); |
| } else if (!strcmp(command_name, "Cnt")) { |
| rv = parse_qm_cnt(val); |
| } else if (!strcmp(command_name, "Enqueue")) { |
| rv = parse_qm_enqueue(val); |
| } else if (!strcmp(command_name, "Srcprofile")) { |
| rv = parse_qm_srcprofile(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_SERVCODE |
| static int |
| parse_servcode(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if (!strcmp(command_name, "Config")) { |
| rv = parse_servcode_config(val); |
| } else if (!strcmp(command_name, "Loopcheck")) { |
| rv = parse_servcode_loopcheck(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_CTRLPKT |
| static int |
| parse_ctrlpkt(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if (!strcmp(command_name, "EthernetType")) { |
| rv = parse_ctrlpkt_ethernettype(val); |
| } else if (!strcmp(command_name, "Rfdb")) { |
| rv = parse_ctrlpkt_rfdb(val); |
| } else if (!strcmp(command_name, "AppProfile")) { |
| rv = parse_ctrlpkt_appprofile(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_POLICER |
| static int |
| parse_policer(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Timeslot")) { |
| rv = parse_policer_timeslot(val); |
| } else if(!strcmp(command_name, "Fcscompensation")) { |
| rv = parse_policer_fcscompensation(val); |
| } else if(!strcmp(command_name, "Portentry")) { |
| rv = parse_policer_portentry(val); |
| } else if(!strcmp(command_name, "Aclentry")) { |
| rv = parse_policer_aclentry(val); |
| } else if(!strcmp(command_name, "Bypass")) { |
| rv = parse_policer_bypass(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_SHAPER |
| static int |
| parse_shaper(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if(!strcmp(command_name, "Porttimeslot")) { |
| rv = parse_shaper_porttimeslot(val); |
| } else if(!strcmp(command_name, "Flowtimeslot")) { |
| rv = parse_shaper_flowtimeslot(val); |
| } else if(!strcmp(command_name, "Queuetimeslot")) { |
| rv = parse_shaper_queuetimeslot(val); |
| } else if(!strcmp(command_name, "Ipgcompensation")) { |
| rv = parse_shaper_ipgcompensation(val); |
| } else if(!strcmp(command_name, "Porttoken")) { |
| rv = parse_shaper_porttoken(val); |
| } else if(!strcmp(command_name, "Flowtoken")) { |
| rv = parse_shaper_flowtoken(val); |
| } else if(!strcmp(command_name, "Queuetoken")) { |
| rv = parse_shaper_queuetoken(val); |
| } else if(!strcmp(command_name, "Portshaper")) { |
| rv = parse_shaper_portshaper(val); |
| } else if(!strcmp(command_name, "Queueshaper")) { |
| rv = parse_shaper_queueshaper(val); |
| } else if(!strcmp(command_name, "Flowshaper")) { |
| rv = parse_shaper_flowshaper(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| #ifdef IN_VSI |
| static int |
| parse_vsi_portbasedvsi(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_vsi_vlanbasedvsi(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "port_id")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "svid")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "cvid")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_vsi_learnctrl(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "learn_status")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "learnaction")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_vsi_stationmove(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "stationmove_en")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "stationmove_action")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_vsi_member(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "vsi")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "membership")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "unknown_unicast_membership")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "unknown_multicast_membership")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "broadcast_membership")) { |
| val_ptr[4] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_vsi(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if (!strcmp(command_name, "Portbasedvsi")) { |
| rv = parse_vsi_portbasedvsi(val); |
| } else if (!strcmp(command_name, "Vlanbasedvsi")) { |
| rv = parse_vsi_vlanbasedvsi(val); |
| } else if (!strcmp(command_name, "Learnctrl")) { |
| rv = parse_vsi_learnctrl(val); |
| } else if (!strcmp(command_name, "Stationmove")) { |
| rv = parse_vsi_stationmove(val); |
| } else if (!strcmp(command_name, "Member")) { |
| rv = parse_vsi_member(val); |
| } |
| |
| return rv; |
| } |
| #endif |
| |
| static int |
| parse_debug_module_func(struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| int rv = 0; |
| |
| switch_ext_p = val->value.ext_val; |
| while (switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| |
| if (!strcmp(ext_value_p->option_name, "name")) { |
| switch_ext_p = switch_ext_p->next; |
| continue; |
| } else if (!strcmp(ext_value_p->option_name, "module")) { |
| val_ptr[0] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "bitmap0")) { |
| val_ptr[1] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "bitmap1")) { |
| val_ptr[2] = (char*)ext_value_p->option_value; |
| } else if (!strcmp(ext_value_p->option_name, "bitmap2")) { |
| val_ptr[3] = (char*)ext_value_p->option_value; |
| } else { |
| rv = -1; |
| break; |
| } |
| |
| parameter_length++; |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| return rv; |
| } |
| |
| static int |
| parse_debug(const char *command_name, struct switch_val *val) |
| { |
| int rv = -1; |
| if (!strcmp(command_name, "Module_func")) { |
| rv = parse_debug_module_func(val); |
| } |
| return rv; |
| } |
| |
| static int name_transfer(char *name, char *module, char *cmd) |
| { |
| char *p; |
| unsigned int i = 0, len = 0; |
| |
| p = name + 1; |
| len = strlen(name); |
| for(i=1; i<len; i++) { |
| if(*p>='A'&&*p<='Z') |
| break; |
| p++; |
| } |
| |
| if(i<len) { |
| strlcpy(module, name, i+1); |
| strlcpy(cmd, p, COMMAND_NAME_MAX_LEN); |
| return 0; |
| } |
| |
| return -1; |
| } |
| |
| int |
| qca_ar8327_sw_switch_ext(struct switch_dev *dev, |
| const struct switch_attr *attr, |
| struct switch_val *val) |
| { |
| struct switch_ext *switch_ext_p, *ext_value_p; |
| struct qca_phy_priv *priv = qca_phy_priv_get(dev); |
| unsigned int i = 0; |
| int rv = -1; |
| switch_ext_p = val->value.ext_val; |
| |
| memset(whole_command_line, 0, sizeof(whole_command_line)); |
| memset(module_name, 0, sizeof(module_name)); |
| memset(command_name, 0, sizeof(command_name)); |
| while(switch_ext_p) { |
| ext_value_p = switch_ext_p; |
| if(!strcmp(ext_value_p->option_name, "name")) { |
| name_transfer((char*)ext_value_p->option_value, module_name, command_name); |
| SSDK_DEBUG("module_name:%s command_name:%s\n", module_name, command_name); |
| break; |
| } |
| switch_ext_p = switch_ext_p->next; |
| } |
| |
| parameter_length = 0; |
| |
| if(!strcmp(module_name, "Qos")) { |
| #ifdef IN_QOS |
| rv = parse_qos(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Cosmap")) { |
| #ifdef IN_COSMAP |
| rv = parse_cos(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Rate")) { |
| #ifdef IN_RATE |
| rv = parse_rate(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Port")) { |
| #ifdef IN_PORTCONTROL |
| rv = parse_port(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Portvlan")) { |
| #ifdef IN_PORTVLAN |
| rv = parse_portvlan(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Vlan")) { |
| #ifdef IN_VLAN |
| rv = parse_vlan(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Fdb")) { |
| #ifdef IN_FDB |
| rv = parse_fdb(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Rsshash")) { |
| #ifdef IN_RSS_HASH |
| rv = parse_rsshash(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Igmp")) { |
| #ifdef IN_IGMP |
| rv = parse_igmp(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Sec")) { |
| #ifdef IN_SEC |
| rv = parse_sec(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Misc")) { |
| #ifdef IN_MISC |
| rv = parse_misc(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Ip")) { |
| #ifdef IN_IP |
| rv = parse_ip(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Nat")) { |
| #ifdef IN_NAT |
| rv = parse_nat(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Stp")) { |
| #ifdef IN_STP |
| rv = parse_stp(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Mirror")) { |
| #ifdef IN_MIRROR |
| rv = parse_mirror(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Leaky")) { |
| #ifdef IN_LEAKY |
| rv = parse_leaky(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Trunk")) { |
| #ifdef IN_TRUNK |
| rv = parse_trunk(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Mib")) { |
| #ifdef IN_MIB |
| rv = parse_mib(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Acl")) { |
| #ifdef IN_ACL |
| rv = parse_acl(command_name, val, priv->device_id); |
| #endif |
| } else if(!strcmp(module_name, "Flow")) { |
| #ifdef IN_FLOW |
| rv = parse_flow(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Bm")) { |
| #ifdef IN_BM |
| rv = parse_bm(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Qm")) { |
| #ifdef IN_QM |
| rv = parse_qm(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Servcode")) { |
| #ifdef IN_SERVCODE |
| rv = parse_servcode(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Ctrlpkt")) { |
| #ifdef IN_CTRLPKT |
| rv = parse_ctrlpkt(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Policer")) { |
| #ifdef IN_POLICER |
| rv = parse_policer(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Shaper")) { |
| #ifdef IN_SHAPER |
| rv = parse_shaper(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Vsi")) { |
| #ifdef IN_VSI |
| rv = parse_vsi(command_name, val); |
| #endif |
| } else if(!strcmp(module_name, "Debug")) { |
| rv = parse_debug(command_name, val); |
| } |
| |
| if(!rv) { |
| strlcat(whole_command_line, module_name, sizeof(whole_command_line)); |
| strlcat(whole_command_line, " ", sizeof(whole_command_line)); |
| strlcat(whole_command_line, command_name, sizeof(whole_command_line)); |
| strlcat(whole_command_line, " ", sizeof(whole_command_line)); |
| strlcat(whole_command_line, "set", sizeof(whole_command_line)); |
| strlcat(whole_command_line, " ", sizeof(whole_command_line)); |
| for(i=0; i<parameter_length; i++) { |
| if(val_ptr[i]) { |
| strlcat(whole_command_line, val_ptr[i], sizeof(whole_command_line)); |
| strlcat(whole_command_line, " ", sizeof(whole_command_line)); |
| } |
| |
| val_ptr[i] = NULL; |
| } |
| |
| SSDK_DEBUG("command_line:%s\n", whole_command_line); |
| |
| } |
| uci_set_devid(priv->device_id); |
| set_talk_mode(0); |
| rv = cmd_run_one(whole_command_line); |
| set_talk_mode(1); |
| |
| SSDK_DEBUG("cmd_run_one: ret=%d\r\n", rv); |
| |
| return rv; |
| } |