Lines Matching refs:filter

109 	u8 activated;			/* Used to prevent expiry before filter
131 struct mlx4_en_filter *filter = container_of(work,
134 struct mlx4_en_priv *priv = filter->priv;
136 .id = mlx4_ip_proto_to_trans_rule_id(filter->ip_proto),
139 .dst_port = filter->dst_port,
141 .src_port = filter->src_port,
150 .dst_ip = filter->dst_ip,
152 .src_ip = filter->src_ip,
174 filter->ip_proto);
181 rule.qpn = priv->rss_map.qps[filter->rxq_index].qpn;
185 filter->activated = 0;
187 if (filter->reg_id) {
188 rc = mlx4_flow_detach(priv->mdev->dev, filter->reg_id);
193 rc = mlx4_flow_attach(priv->mdev->dev, &rule, &filter->reg_id);
200 filter->activated = 1;
224 struct mlx4_en_filter *filter = NULL;
226 filter = kzalloc(sizeof(struct mlx4_en_filter), GFP_ATOMIC);
227 if (!filter)
230 filter->priv = priv;
231 filter->rxq_index = rxq_index;
232 INIT_WORK(&filter->work, mlx4_en_filter_work);
234 filter->src_ip = src_ip;
235 filter->dst_ip = dst_ip;
236 filter->ip_proto = ip_proto;
237 filter->src_port = src_port;
238 filter->dst_port = dst_port;
240 filter->flow_id = flow_id;
242 filter->id = priv->last_filter_id++ % RPS_NO_FILTER;
244 list_add_tail(&filter->next, &priv->filters);
245 hlist_add_head(&filter->filter_chain,
249 return filter;
252 static void mlx4_en_filter_free(struct mlx4_en_filter *filter)
254 struct mlx4_en_priv *priv = filter->priv;
257 list_del(&filter->next);
259 rc = mlx4_flow_detach(priv->mdev->dev, filter->reg_id);
263 kfree(filter);
270 struct mlx4_en_filter *filter;
273 hlist_for_each_entry(filter,
277 if (filter->src_ip == src_ip &&
278 filter->dst_ip == dst_ip &&
279 filter->ip_proto == ip_proto &&
280 filter->src_port == src_port &&
281 filter->dst_port == dst_port) {
282 ret = filter;
295 struct mlx4_en_filter *filter;
324 filter = mlx4_en_filter_find(priv, src_ip, dst_ip, ip_proto,
326 if (filter) {
327 if (filter->rxq_index == rxq_index)
330 filter->rxq_index = rxq_index;
332 filter = mlx4_en_filter_alloc(priv, rxq_index,
335 if (!filter) {
341 queue_work(priv->mdev->workqueue, &filter->work);
344 ret = filter->id;
353 struct mlx4_en_filter *filter, *tmp;
357 list_for_each_entry_safe(filter, tmp, &priv->filters, next) {
358 list_move(&filter->next, &del_list);
359 hlist_del(&filter->filter_chain);
363 list_for_each_entry_safe(filter, tmp, &del_list, next) {
364 cancel_work_sync(&filter->work);
365 mlx4_en_filter_free(filter);
371 struct mlx4_en_filter *filter = NULL, *tmp, *last_filter = NULL;
376 list_for_each_entry_safe(filter, tmp, &priv->filters, next) {
380 if (filter->activated &&
381 !work_pending(&filter->work) &&
383 filter->rxq_index, filter->flow_id,
384 filter->id)) {
385 list_move(&filter->next, &del_list);
386 hlist_del(&filter->filter_chain);
388 last_filter = filter;
398 list_for_each_entry_safe(filter, tmp, &del_list, next)
399 mlx4_en_filter_free(filter);
417 /* Add VID to port VLAN filter */
422 en_err(priv, "Failed configuring VLAN filter\n");
443 /* Remove VID from port VLAN filter */
450 en_err(priv, "Failed configuring VLAN filter\n");
791 /* Disable port multicast filter (unconditionally) */
795 en_err(priv, "Failed disabling multicast filter\n");
854 * Enable/disable the multicast filter according to
861 en_err(priv, "Failed disabling multicast filter\n");
913 en_err(priv, "Failed disabling multicast filter\n");
915 /* Flush mcast filter and init it with broadcast address */
930 en_err(priv, "Failed enabling multicast filter\n");
1532 /* Flush multicast filter */