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;

