root/drivers/net/team/team_mode_roundrobin.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rr_transmit
  2. rr_init_module
  3. rr_cleanup_module

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  * drivers/net/team/team_mode_roundrobin.c - Round-robin mode for team
   4  * Copyright (c) 2011 Jiri Pirko <jpirko@redhat.com>
   5  */
   6 
   7 #include <linux/kernel.h>
   8 #include <linux/types.h>
   9 #include <linux/module.h>
  10 #include <linux/init.h>
  11 #include <linux/errno.h>
  12 #include <linux/netdevice.h>
  13 #include <linux/if_team.h>
  14 
  15 struct rr_priv {
  16         unsigned int sent_packets;
  17 };
  18 
  19 static struct rr_priv *rr_priv(struct team *team)
  20 {
  21         return (struct rr_priv *) &team->mode_priv;
  22 }
  23 
  24 static bool rr_transmit(struct team *team, struct sk_buff *skb)
  25 {
  26         struct team_port *port;
  27         int port_index;
  28 
  29         port_index = team_num_to_port_index(team,
  30                                             rr_priv(team)->sent_packets++);
  31         port = team_get_port_by_index_rcu(team, port_index);
  32         if (unlikely(!port))
  33                 goto drop;
  34         port = team_get_first_port_txable_rcu(team, port);
  35         if (unlikely(!port))
  36                 goto drop;
  37         if (team_dev_queue_xmit(team, port, skb))
  38                 return false;
  39         return true;
  40 
  41 drop:
  42         dev_kfree_skb_any(skb);
  43         return false;
  44 }
  45 
  46 static const struct team_mode_ops rr_mode_ops = {
  47         .transmit               = rr_transmit,
  48         .port_enter             = team_modeop_port_enter,
  49         .port_change_dev_addr   = team_modeop_port_change_dev_addr,
  50 };
  51 
  52 static const struct team_mode rr_mode = {
  53         .kind           = "roundrobin",
  54         .owner          = THIS_MODULE,
  55         .priv_size      = sizeof(struct rr_priv),
  56         .ops            = &rr_mode_ops,
  57         .lag_tx_type    = NETDEV_LAG_TX_TYPE_ROUNDROBIN,
  58 };
  59 
  60 static int __init rr_init_module(void)
  61 {
  62         return team_mode_register(&rr_mode);
  63 }
  64 
  65 static void __exit rr_cleanup_module(void)
  66 {
  67         team_mode_unregister(&rr_mode);
  68 }
  69 
  70 module_init(rr_init_module);
  71 module_exit(rr_cleanup_module);
  72 
  73 MODULE_LICENSE("GPL v2");
  74 MODULE_AUTHOR("Jiri Pirko <jpirko@redhat.com>");
  75 MODULE_DESCRIPTION("Round-robin mode for team");
  76 MODULE_ALIAS_TEAM_MODE("roundrobin");

/* [<][>][^][v][top][bottom][index][help] */