def delete(self, request, ip_address):
     try:
         port_id = self.table.kwargs['port_id']
         port = neutron.port_get(request, port_id)
         pairs = port.get('allowed_address_pairs', [])
         pairs = [pair for pair in pairs
                  if pair['ip_address'] != ip_address]
         neutron.port_update(request, port_id, allowed_address_pairs=pairs)
     except Exception:
         msg = _('Failed to update port %s')
         LOG.info(msg, port_id)
         redirect = reverse("horizon:project:networks:ports:detail",
                            args=(port_id,))
         exceptions.handle(request, msg % port_id, redirect=redirect)
    def handle(self, request, data):
        port_id = self.initial['port_id']
        try:
            port = neutron.port_get(request, port_id)

            current = port.get('allowed_address_pairs', [])
            pair = {'ip_address': data['ip']}
            if data['mac'] and len(data['mac']) > 5:
                pair['mac_address'] = data['mac']
            current.append(pair)
            port = neutron.port_update(request, port_id,
                                       allowed_address_pairs=current)
            msg = _('Port %s was successfully updated.') % port_id
            messages.success(request, msg)
            return port
        except Exception as e:
            msg = _('Failed to update port "%s".') % port_id
            LOG.info(msg)
            args = (self.initial.get('port_id'),)
            redirect = reverse(self.failure_url, args=args)
            exceptions.handle(request, msg, redirect=redirect)
            return False