blob: eb7f11d7b97594520e76669e676021375173cdf4 [file] [log] [blame]
/*
*
* (C) 2011-13 - ntop.org
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lessed General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
*
*/
/* ********************************* */
int i82599_add_hash_filtering_rule(pfring *ring, hash_filtering_rule* rule_to_add) {
hw_filtering_rule rule;
memset(&rule, 0, sizeof(rule));
//if(ring->ft_device_type != intel_82599_family
//&& ring->dna_dev.mem_info.device_model != intel_ixgbe_82599)
// return -4;
switch(rule_to_add->rule_action) {
case forward_packet_and_stop_rule_evaluation:
case forward_packet_add_rule_and_stop_rule_evaluation:
return 0; /* Nothing to do */
case dont_forward_packet_and_stop_rule_evaluation:
break; /* Ok - DROP */
case reflect_packet_and_stop_rule_evaluation:
case reflect_packet_and_continue_rule_evaluation:
case bounce_packet_and_stop_rule_evaluation:
case bounce_packet_and_continue_rule_evaluation:
case execute_action_and_continue_rule_evaluation:
case execute_action_and_stop_rule_evaluation:
default:
return -3; /* Not supported */
}
rule.rule_id = rule_to_add->rule_id;
rule.rule_family_type = intel_82599_perfect_filter_rule;
rule.rule_family.perfect_rule.vlan_id = rule_to_add->vlan_id;
rule.rule_family.perfect_rule.proto = rule_to_add->proto;
rule.rule_family.perfect_rule.s_addr = rule_to_add->host_peer_a.v4;
rule.rule_family.perfect_rule.d_addr = rule_to_add->host_peer_b.v4;
rule.rule_family.perfect_rule.s_port = rule_to_add->port_peer_a;
rule.rule_family.perfect_rule.d_port = rule_to_add->port_peer_b;
rule.rule_family.perfect_rule.queue_id = -1;
return virtual_filtering_device_add_hw_rule(ring, &rule);
}
/* ********************************* */
int i82599_add_filtering_rule(pfring *ring, filtering_rule* rule_to_add) {
hw_filtering_rule rule;
memset(&rule, 0, sizeof(rule));
//if(ring->ft_device_type != intel_82599_family
//&& ring->dna_dev.mem_info.device_model != intel_ixgbe_82599)
// return -4;
switch(rule_to_add->rule_action) {
case forward_packet_and_stop_rule_evaluation:
case forward_packet_add_rule_and_stop_rule_evaluation:
return 0; /* Nothing to do */
case dont_forward_packet_and_stop_rule_evaluation:
break; /* Ok - DROP */
case reflect_packet_and_stop_rule_evaluation:
case reflect_packet_and_continue_rule_evaluation:
case bounce_packet_and_stop_rule_evaluation:
case bounce_packet_and_continue_rule_evaluation:
case execute_action_and_continue_rule_evaluation:
case execute_action_and_stop_rule_evaluation:
default:
return -3; /* Not supported */
}
//rule_to_add->balance_id
//rule_to_add->balance_pool
//rule_to_add->core_fields.shost_mask.v4 (/32 only)
//rule_to_add->core_fields.dhost_mask.v4 (/32 only)
//rule_to_add->core_fields.sport_high (no range)
//rule_to_add->core_fields.dport_high (no range)
//rule_to_add->core_fields.vlan_id (no VLAN)
rule.rule_id = rule_to_add->rule_id;
rule.rule_family_type = intel_82599_five_tuple_rule;
rule.rule_family.five_tuple_rule.proto = rule_to_add->core_fields.proto;
rule.rule_family.five_tuple_rule.s_addr = rule_to_add->core_fields.shost.v4;
rule.rule_family.five_tuple_rule.d_addr = rule_to_add->core_fields.dhost.v4;
rule.rule_family.five_tuple_rule.s_port = rule_to_add->core_fields.sport_low;
rule.rule_family.five_tuple_rule.d_port = rule_to_add->core_fields.dport_low;
rule.rule_family.five_tuple_rule.queue_id = -1;
return virtual_filtering_device_add_hw_rule(ring, &rule);
}
/* ********************************* */
int i82599_remove_filtering_rule(pfring *ring, u_int16_t rule_id) {
return virtual_filtering_device_remove_hw_rule(ring, rule_id);
}