linux/net/tipc/bcast.c
<<
>>
Prefs
   1/*
   2 * net/tipc/bcast.c: TIPC broadcast code
   3 *
   4 * Copyright (c) 2004-2006, 2014-2017, Ericsson AB
   5 * Copyright (c) 2004, Intel Corporation.
   6 * Copyright (c) 2005, 2010-2011, Wind River Systems
   7 * All rights reserved.
   8 *
   9 * Redistribution and use in source and binary forms, with or without
  10 * modification, are permitted provided that the following conditions are met:
  11 *
  12 * 1. Redistributions of source code must retain the above copyright
  13 *    notice, this list of conditions and the following disclaimer.
  14 * 2. Redistributions in binary form must reproduce the above copyright
  15 *    notice, this list of conditions and the following disclaimer in the
  16 *    documentation and/or other materials provided with the distribution.
  17 * 3. Neither the names of the copyright holders nor the names of its
  18 *    contributors may be used to endorse or promote products derived from
  19 *    this software without specific prior written permission.
  20 *
  21 * Alternatively, this software may be distributed under the terms of the
  22 * GNU General Public License ("GPL") version 2 as published by the Free
  23 * Software Foundation.
  24 *
  25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  28 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  29 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  35 * POSSIBILITY OF SUCH DAMAGE.
  36 */
  37
  38#include <linux/tipc_config.h>
  39#include "socket.h"
  40#include "msg.h"
  41#include "bcast.h"
  42#include "link.h"
  43#include "name_table.h"
  44
  45#define BCLINK_WIN_DEFAULT  50  /* bcast link window size (default) */
  46#define BCLINK_WIN_MIN      32  /* bcast minimum link window size */
  47
  48const char tipc_bclink_name[] = "broadcast-link";
  49unsigned long sysctl_tipc_bc_retruni __read_mostly;
  50
  51/**
  52 * struct tipc_bc_base - base structure for keeping broadcast send state
  53 * @link: broadcast send link structure
  54 * @inputq: data input queue; will only carry SOCK_WAKEUP messages
  55 * @dests: array keeping number of reachable destinations per bearer
  56 * @primary_bearer: a bearer having links to all broadcast destinations, if any
  57 * @bcast_support: indicates if primary bearer, if any, supports broadcast
  58 * @force_bcast: forces broadcast for multicast traffic
  59 * @rcast_support: indicates if all peer nodes support replicast
  60 * @force_rcast: forces replicast for multicast traffic
  61 * @rc_ratio: dest count as percentage of cluster size where send method changes
  62 * @bc_threshold: calculated from rc_ratio; if dests > threshold use broadcast
  63 */
  64struct tipc_bc_base {
  65        struct tipc_link *link;
  66        struct sk_buff_head inputq;
  67        int dests[MAX_BEARERS];
  68        int primary_bearer;
  69        bool bcast_support;
  70        bool force_bcast;
  71        bool rcast_support;
  72        bool force_rcast;
  73        int rc_ratio;
  74        int bc_threshold;
  75};
  76
  77static struct tipc_bc_base *tipc_bc_base(struct net *net)
  78{
  79        return tipc_net(net)->bcbase;