Esempio n. 1
0
 def _delete_all_valve_flows(self):
     """Delete all flows from all FAUCET tables."""
     ofmsgs = []
     for table_id in self._all_valve_tables():
         ofmsgs.extend(self.valve_flowdel(table_id))
     ofmsgs.append(valve_of.groupdel())
     return ofmsgs
Esempio n. 2
0
def build_output_actions(output_dict):
    """Implement actions to alter packet/output."""
    output_actions = []
    output_port = None
    ofmsgs = []
    # if destination rewriting selected, rewrite it.
    if 'dl_dst' in output_dict:
        output_actions.append(valve_of.set_eth_dst(output_dict['dl_dst']))
    # rewrite any VLAN headers.
    vlan_actions = rewrite_vlan(output_dict)
    if vlan_actions:
        output_actions.extend(vlan_actions)
    if 'port' in output_dict:
        output_port = output_dict['port']
        output_actions.append(valve_of.output_port(output_port))
    if 'failover' in output_dict:
        failover = output_dict['failover']
        group_id = failover['group_id']
        buckets = []
        for port in failover['ports']:
            buckets.append(
                valve_of.bucket(watch_port=port,
                                actions=[valve_of.output_port(port)]))
        ofmsgs.append(valve_of.groupdel(group_id=group_id))
        ofmsgs.append(valve_of.groupadd_ff(group_id=group_id, buckets=buckets))
        output_actions.append(valve_of.group_act(group_id=group_id))
    return (output_port, output_actions, ofmsgs)
Esempio n. 3
0
 def _delete_all_valve_flows(self):
     """Delete all flows from all FAUCET tables."""
     ofmsgs = []
     for table_id in self._all_valve_tables():
         ofmsgs.extend(self.valve_flowdel(table_id))
     if self.dp.group_table:
         ofmsgs.append(valve_of.groupdel())
     return ofmsgs
Esempio n. 4
0
 def _build_group_flood_rules(self, vlan, modify, command):
     flood_priority = self.flood_priority
     broadcast_buckets = self._build_group_buckets(vlan, False)
     unicast_buckets = self._build_group_buckets(vlan, vlan.unicast_flood)
     group_id = vlan.vid
     ofmsgs = []
     group_mod_method = valve_of.groupadd
     if modify:
         group_mod_method = valve_of.groupmod
     else:
         ofmsgs.append(valve_of.groupdel(group_id=group_id))
         ofmsgs.append(
             valve_of.groupdel(group_id=group_id +
                               valve_of.VLAN_GROUP_OFFSET))
     ofmsgs.append(
         group_mod_method(group_id=group_id, buckets=broadcast_buckets))
     ofmsgs.append(
         group_mod_method(group_id=group_id + valve_of.VLAN_GROUP_OFFSET,
                          buckets=unicast_buckets))
     for unicast_eth_dst, eth_dst, eth_dst_mask in self.FLOOD_DSTS:
         if unicast_eth_dst and not vlan.unicast_flood:
             continue
         group_id = vlan.vid
         if not eth_dst:
             group_id = group_id + valve_of.VLAN_GROUP_OFFSET
         match = self.valve_in_match(self.flood_table,
                                     vlan=vlan,
                                     eth_dst=eth_dst,
                                     eth_dst_mask=eth_dst_mask)
         ofmsgs.append(
             self.valve_flowmod(self.flood_table,
                                match=match,
                                command=command,
                                inst=[
                                    valve_of.apply_actions(
                                        [valve_of.group_act(group_id)])
                                ],
                                priority=flood_priority))
         flood_priority += 1
     return ofmsgs
Esempio n. 5
0
 def _update_nexthop_group(self, is_updated, resolved_ip_gw, vlan, port,
                           eth_src):
     group_mod_method = None
     group_id = None
     buckets = self._nexthop_group_buckets(vlan, port, eth_src)
     ofmsgs = []
     if is_updated:
         group_mod_method = valve_of.groupmod
         group_id = self.ip_gw_to_group_id[resolved_ip_gw]
     else:
         group_mod_method = valve_of.groupadd
         group_id = self._group_id_from_ip_gw(resolved_ip_gw)
         self.ip_gw_to_group_id[resolved_ip_gw] = group_id
         ofmsgs.append(valve_of.groupdel(group_id=group_id))
     ofmsgs.append(group_mod_method(group_id=group_id, buckets=buckets))
     return ofmsgs
Esempio n. 6
0
 def delete_all(self):
     return valve_of.groupdel()
Esempio n. 7
0
 def groupdel(self, group_id):
     return valve_of.groupdel(group_id=group_id)
Esempio n. 8
0
 def delete_all(self):
     """Delete all groups."""
     self.entries = {}
     return valve_of.groupdel()
Esempio n. 9
0
 def delete(self):
     if self.group_id in self.table.entries:
         del self.table.entries[self.group_id]
     return valve_of.groupdel(group_id=self.group_id)