Lines Matching refs:filter

36 #include <linux/filter.h>
177 u8 activated; /* Used to prevent expiry before filter
202 struct mlx4_en_filter *filter = container_of(work,
205 struct mlx4_en_priv *priv = filter->priv;
207 .id = mlx4_ip_proto_to_trans_rule_id(filter->ip_proto),
210 .dst_port = filter->dst_port,
212 .src_port = filter->src_port,
221 .dst_ip = filter->dst_ip,
223 .src_ip = filter->src_ip,
245 filter->ip_proto);
252 rule.qpn = priv->rss_map.qps[filter->rxq_index].qpn;
256 filter->activated = 0;
258 if (filter->reg_id) {
259 rc = mlx4_flow_detach(priv->mdev->dev, filter->reg_id);
264 rc = mlx4_flow_attach(priv->mdev->dev, &rule, &filter->reg_id);
271 filter->activated = 1;
295 struct mlx4_en_filter *filter;
297 filter = kzalloc(sizeof(struct mlx4_en_filter), GFP_ATOMIC);
298 if (!filter)
301 filter->priv = priv;
302 filter->rxq_index = rxq_index;
303 INIT_WORK(&filter->work, mlx4_en_filter_work);
305 filter->src_ip = src_ip;
306 filter->dst_ip = dst_ip;
307 filter->ip_proto = ip_proto;
308 filter->src_port = src_port;
309 filter->dst_port = dst_port;
311 filter->flow_id = flow_id;
313 filter->id = priv->last_filter_id++ % RPS_NO_FILTER;
315 list_add_tail(&filter->next, &priv->filters);
316 hlist_add_head(&filter->filter_chain,
320 return filter;
323 static void mlx4_en_filter_free(struct mlx4_en_filter *filter)
325 struct mlx4_en_priv *priv = filter->priv;
328 list_del(&filter->next);
330 rc = mlx4_flow_detach(priv->mdev->dev, filter->reg_id);
334 kfree(filter);
341 struct mlx4_en_filter *filter;
344 hlist_for_each_entry(filter,
348 if (filter->src_ip == src_ip &&
349 filter->dst_ip == dst_ip &&
350 filter->ip_proto == ip_proto &&
351 filter->src_port == src_port &&
352 filter->dst_port == dst_port) {
353 ret = filter;
366 struct mlx4_en_filter *filter;
398 filter = mlx4_en_filter_find(priv, src_ip, dst_ip, ip_proto,
400 if (filter) {
401 if (filter->rxq_index == rxq_index)
404 filter->rxq_index = rxq_index;
406 filter = mlx4_en_filter_alloc(priv, rxq_index,
409 if (!filter) {
415 queue_work(priv->mdev->workqueue, &filter->work);
418 ret = filter->id;
427 struct mlx4_en_filter *filter, *tmp;
431 list_for_each_entry_safe(filter, tmp, &priv->filters, next) {
432 list_move(&filter->next, &del_list);
433 hlist_del(&filter->filter_chain);
437 list_for_each_entry_safe(filter, tmp, &del_list, next) {
438 cancel_work_sync(&filter->work);
439 mlx4_en_filter_free(filter);
445 struct mlx4_en_filter *filter = NULL, *tmp, *last_filter = NULL;
450 list_for_each_entry_safe(filter, tmp, &priv->filters, next) {
454 if (filter->activated &&
455 !work_pending(&filter->work) &&
457 filter->rxq_index, filter->flow_id,
458 filter->id)) {
459 list_move(&filter->next, &del_list);
460 hlist_del(&filter->filter_chain);
462 last_filter = filter;
472 list_for_each_entry_safe(filter, tmp, &del_list, next)
473 mlx4_en_filter_free(filter);
489 /* Add VID to port VLAN filter */
494 en_err(priv, "Failed configuring VLAN filter\n");
518 /* Remove VID from port VLAN filter */
525 en_err(priv, "Failed configuring VLAN filter\n");
948 /* Disable port multicast filter (unconditionally) */
952 en_err(priv, "Failed disabling multicast filter\n");
1012 /* Enable/disable the multicast filter according to IFF_ALLMULTI */
1017 en_err(priv, "Failed disabling multicast filter\n");
1069 en_err(priv, "Failed disabling multicast filter\n");
1071 /* Flush mcast filter and init it with broadcast address */
1089 en_err(priv, "Failed enabling multicast filter\n");
1966 /* Flush multicast filter */
3461 en_warn(priv, "Can't turn ON rx vlan offload while time-stamping rx filter is ON\n");