00001
00002
00003
00004
00005
00006
00007 #ifndef _FM_NM_DRIVER_H
00008 #define _FM_NM_DRIVER_H
00009
00010 #define FM_ACL_NAME_MAX 64
00011
00012 struct fm_policerkey {
00013 nmf_id_t policer_id;
00014 int sw_id;
00015 };
00016
00017 struct fm_policer {
00018 struct nm_rbn rbn;
00019 struct fm_policerkey key;
00020
00021
00022
00023 int acl;
00024
00025
00026
00027 int rule;
00028 };
00029 struct fm_policer *fm_policer_find(int sw_id, nmf_id_t id);
00030
00031
00032
00033
00034 nmf_status_t _fm_map_error(fm_status);
00035 #define fm_map_error(s) (!s?s:_fm_map_error(s))
00036
00037 static inline u_int bv_2_mask(nm_bv_t *bv)
00038 {
00039 int b;
00040 u_int mask = 0;
00041 nm_bv_iter_t i;
00042
00043 for (b = nm_bv_first(bv, &i); b >= 0; b = nm_bv_next(bv, &i))
00044 mask |= (1<<b);
00045
00046 return mask;
00047 }
00048
00049 static inline u_int bv_2_phys_mask(int sw_id, nm_bv_t *bv)
00050 {
00051 int b;
00052 u_int mask = 0;
00053 nm_bv_iter_t i;
00054
00055 for (b = nm_bv_first(bv, &i); b >= 0; b = nm_bv_next(bv, &i)) {
00056 fm_switch *sw_ptr = fmRootApi->fmSwitchStateTable[sw_id];
00057 int phys_port;
00058 (void)fmMapLogicalPortToPhysical(sw_ptr, b, &phys_port);
00059 mask |= (1<<phys_port);
00060 }
00061 return mask;
00062 }
00063
00064 static inline void set_fm_macaddr(fm_macaddr *fmac, u_char *ethaddr)
00065 {
00066 u_char *b = (u_char *)fmac;
00067
00068 b[0] = b[1] = 0;
00069 b += 2;
00070 memcpy(b, ethaddr, 6);
00071 }
00072
00073 static inline u_char * get_macaddr(fm_macaddr *fmac)
00074 {
00075 u_char *b = (u_char *)fmac;
00076 return &b[2];
00077 }
00078
00079
00080 nmf_status_t fm_init_switch(int sw);
00081 int fm_num_ports(struct nmf_slot *slot);
00082
00083
00084 nmf_status_t fm_acl_commit(struct nmf_slot *slot);
00085 nmf_status_t
00086 fm_acl_add(struct nmf_slot *slot,
00087 enum nmf_acl_scope scope, int precedence,
00088 nmf_id_t *id);
00089 nmf_status_t fm_acl_rule_add(struct nmf_slot *, nmf_id_t id, int rule,
00090 struct nmf_acl_rule *);
00091 nmf_status_t fm_acl_rule_rem(struct nmf_slot *, nmf_id_t id, int rule);
00092 nmf_status_t fm_acl_rem(struct nmf_slot *, nmf_id_t);
00093 nmf_status_t fm_acl_rule_get(struct nmf_slot *, nmf_id_t id, int rule,
00094 struct nmf_acl_rule **acl_rule);
00095 nmf_status_t fm_acl_rule_attr_get(struct nmf_slot *slot,
00096 nmf_id_t acl_id, int rule_no,
00097 enum nmf_acl_rule_attr_id attr_id,
00098 union nmf_acl_rule_attr_value *value);
00099 nmf_status_t fm_acl_attr_set(struct nmf_slot *, nmf_id_t id,
00100 enum nmf_acl_attr_id attr_id,
00101 union nmf_acl_attr_value *value);
00102 nmf_status_t fm_acl_attr_get(struct nmf_slot *, nmf_id_t id,
00103 enum nmf_acl_attr_id attr_id,
00104 union nmf_acl_attr_value *value);
00105 nmf_status_t fm_acl_list_get(struct nmf_slot *slot, nm_bv_t *acl_list);
00106
00107
00108 nmf_status_t fm_policer_add(struct nmf_slot *slot, nmf_id_t *policer_id);
00109 nmf_status_t fm_policer_rem(struct nmf_slot *slot, nmf_id_t policer_id);
00110 nmf_status_t fm_policer_list_get(struct nmf_slot *slot, nm_bv_t *list);
00111 nmf_status_t fm_policer_attr_set(struct nmf_slot *slot, nmf_id_t policer_id,
00112 enum nmf_policer_attr_id id,
00113 union nmf_policer_attr_value *value);
00114 nmf_status_t fm_policer_attr_get(struct nmf_slot *slot, nmf_id_t policer_id,
00115 enum nmf_policer_attr_id id,
00116 union nmf_policer_attr_value *value);
00117
00118
00119 nmf_status_t fm_qos_slot_attr_get(struct nmf_slot *,
00120 enum nmf_qos_slot_attr_id id,
00121 union nmf_qos_slot_attr_value *val);
00122 nmf_status_t fm_qos_slot_attr_set(struct nmf_slot *,
00123 enum nmf_qos_slot_attr_id id,
00124 union nmf_qos_slot_attr_value *val);
00125 nmf_status_t fm_qos_port_attr_get(struct nmf_slot *,
00126 int port,
00127 enum nmf_qos_port_attr_id id,
00128 union nmf_qos_port_attr_value *val);
00129 nmf_status_t fm_qos_port_attr_set(struct nmf_slot *,
00130 int port,
00131 enum nmf_qos_port_attr_id id,
00132 union nmf_qos_port_attr_value *val);
00133
00134
00135 nmf_status_t fm_pkt_send(struct nmf_slot * slot, char *buf, int len,
00136 struct nmf_send *args);
00137 void fm_pkt_recv(int sw, fm_eventPktRecv *evt);
00138 void *fm_get_packets(void * arg);
00139
00140
00141 nmf_status_t fm_vlan_add(struct nmf_slot *slot, int vlan_id);
00142 nmf_status_t fm_vlan_rem(struct nmf_slot *slot, int vlan_id);
00143 nmf_status_t fm_vlan_list_get(struct nmf_slot *slot, nm_bv_t *vlan_list);
00144 nmf_status_t fm_vlan_port_list_set(struct nmf_slot *slot, int vlan_id,
00145 int tagged, enum nmf_stp_state stp_state,
00146 nm_bv_t *ports);
00147 nmf_status_t fm_vlan_port_list_get(struct nmf_slot *slot, int vlan_id,
00148 nm_bv_t *port_list);
00149 nmf_status_t fm_vlan_attr_set(struct nmf_slot *slot, int vlan_id,
00150 enum nmf_vlan_attr_id id,
00151 union nmf_vlan_attr_value *value);
00152 nmf_status_t fm_vlan_attr_get(struct nmf_slot *slot, int vlan_id,
00153 enum nmf_vlan_attr_id id,
00154 union nmf_vlan_attr_value *value);
00155 nmf_status_t fm_vlan_port_attr_set(struct nmf_slot *slot,
00156 int vlan_id, int port_no,
00157 enum nmf_vlan_port_attr_id id,
00158 union nmf_vlan_port_attr_value *value);
00159 nmf_status_t fm_vlan_port_attr_get(struct nmf_slot *slot,
00160 int vlan_id, int port_no,
00161 enum nmf_vlan_port_attr_id id,
00162 union nmf_vlan_port_attr_value *value);
00163 nmf_status_t fm_vlan_port_add(struct nmf_slot *slot, int vlan_id, int port,
00164 int tagged, enum nmf_stp_state stp_state);
00165 nmf_status_t fm_vlan_port_rem(struct nmf_slot *slot, int vlan_id, int port);
00166
00167
00168 nmf_status_t fm_lag_add(struct nmf_slot *slot, u_int *lag_id);
00169 nmf_status_t fm_lag_rem(struct nmf_slot *slot, int lag_id);
00170 nmf_status_t fm_lag_list_get(struct nmf_slot *slot, nm_bv_t *lag_list);
00171 nmf_status_t fm_lag_port_add(struct nmf_slot *slot, int lag_id, int port);
00172 nmf_status_t fm_lag_port_rem(struct nmf_slot *slot, int lag_id, int port);
00173 nmf_status_t fm_lag_port_list_set(struct nmf_slot *slot, int lag_id, nm_bv_t *ports);
00174 nmf_status_t fm_lag_port_list_get(struct nmf_slot *slot, int lag_id,
00175 nm_bv_t *port_list);
00176 nmf_status_t fm_lag_attr_set(struct nmf_slot *slot, int lag_id,
00177 enum nmf_lag_attr_id id,
00178 union nmf_lag_attr_value *value);
00179 nmf_status_t fm_lag_attr_get(struct nmf_slot *slot, int lag_id,
00180 enum nmf_lag_attr_id id, union nmf_lag_attr_value *value);
00181
00182
00183 nmf_status_t fm_lbg_add(struct nmf_slot *slot, u_int *lbg_id);
00184 nmf_status_t fm_lbg_rem(struct nmf_slot *slot, int lbg_id);
00185 nmf_status_t fm_lbg_list_get(struct nmf_slot *slot, nm_bv_t *lbg_list);
00186 nmf_status_t fm_lbg_port_add(struct nmf_slot *slot, int lbg_id, int port);
00187 nmf_status_t fm_lbg_port_rem(struct nmf_slot *slot, int lbg_id, int port);
00188 nmf_status_t fm_lbg_port_list_set(struct nmf_slot *slot, int lbg_id, nm_bv_t *ports);
00189 nmf_status_t fm_lbg_port_list_get(struct nmf_slot *slot, int lbg_id,
00190 nm_bv_t *port_list);
00191 nmf_status_t fm_lbg_attr_set(struct nmf_slot *slot, int lbg_id,
00192 enum nmf_lbg_attr_id id,
00193 union nmf_lbg_attr_value *value);
00194 nmf_status_t fm_lbg_attr_get(struct nmf_slot *slot, int lbg_id,
00195 enum nmf_lbg_attr_id id, union nmf_lbg_attr_value *value);
00196 nmf_status_t fm_lbg_port_attr_set(struct nmf_slot *slot, int lbg_id, int port,
00197 enum nmf_lbg_port_attr_id id,
00198 union nmf_lbg_port_attr_value *value);
00199 nmf_status_t fm_lbg_port_attr_get(struct nmf_slot *slot, int lbg_id, int port,
00200 enum nmf_lbg_port_attr_id id, union nmf_lbg_port_attr_value *value);
00201
00202
00203 nmf_status_t fm_port_attr_get(struct nmf_slot *slot, int port, enum nmf_port_attr_id id,
00204 union nmf_port_attr_value *val);
00205 nmf_status_t fm_port_attr_set(struct nmf_slot *slot, int port,
00206 enum nmf_port_attr_id id,
00207 union nmf_port_attr_value *val);
00208 nmf_status_t fm_port_stats_get(struct nmf_slot *slot, int port,
00209 struct nmf_port_stats *nmf_stats);
00210 nmf_status_t fm_port_stats_reset(struct nmf_slot *slot, int port);
00211 nmf_status_t get_rx_crc_discard(int sw, int port, int * rx_crc_discard);
00212 nmf_status_t set_rx_crc_discard(int sw, int port, int rx_crc_discard);
00213
00214
00215 nmf_status_t fm_addr_get(struct nmf_slot *slot, struct nmf_addr_rec *adrec);
00216 nmf_status_t fm_addr_add(struct nmf_slot *slot, struct nmf_addr_rec *adrec);
00217 nmf_status_t fm_addr_rem(struct nmf_slot *slot, int vlan_id, u_char *ethaddr);
00218 nmf_status_t fm_addr_flush(struct nmf_slot *slot, nm_u32_t flags,
00219 int vlan_id, int port);
00220
00221
00222 nmf_status_t fm_slot_reset(struct nmf_slot *slot);
00223 nmf_status_t fm_slot_attr_get(struct nmf_slot *slot, enum nmf_slot_attr_id id,
00224 union nmf_slot_attr_value *val);
00225 nmf_status_t fm_slot_attr_set(struct nmf_slot *slot, enum nmf_slot_attr_id id,
00226 union nmf_slot_attr_value *val);
00227
00228
00229 fm_status fm_add_addr_w_trigger(fm_int sw, fm_macAddressEntry *entry, int trig_id);
00230
00231
00232 nmf_status_t fm_mcgrp_add(struct nmf_slot *, int *mcgrp_id);
00233 nmf_status_t fm_mcgrp_rem(struct nmf_slot *, int mcgrp_id);
00234 nmf_status_t fm_mcgrp_list_get(struct nmf_slot *, nm_bv_t *mcgrps);
00235 nmf_status_t fm_mcgrp_port_add(struct nmf_slot *, int mcgrp_id, int port, short vlan_id);
00236 nmf_status_t fm_mcgrp_port_rem(struct nmf_slot *, int mcgrp_id, int port, short vlan_id);
00237 nmf_status_t fm_mcgrp_port_list_get(struct nmf_slot *, int mcgrp_id,
00238 nm_bv_t *ports);
00239 nmf_status_t fm_mcgrp_attr_set(struct nmf_slot *, int lag_id,
00240 enum nmf_mcgrp_attr_id id,
00241 union nmf_mcgrp_attr_value *value);
00242 nmf_status_t fm_mcgrp_attr_get(struct nmf_slot *, int mcgrp_id,
00243 enum nmf_mcgrp_attr_id id,
00244 union nmf_mcgrp_attr_value *value);
00245
00246 #endif