linux/net/tipc/bearer.c

/*
 * net/tipc/bearer.c: TIPC bearer code
 *
 * Copyright (c) 1996-2006, 2013-2016, Ericsson AB
 * Copyright (c) 2004-2006, 2010-2013, Wind River Systems
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the names of the copyright holders nor the names of its
 *    contributors may be used to endorse or promote products derived from
 *    this software without specific prior written permission.
 *
 * Alternatively, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") version 2 as published by the Free
 * Software Foundation.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#include <net/sock.h>
#include "core.h"
#include "bearer.h"
#include "link.h"
#include "discover.h"
#include "monitor.h"
#include "bcast.h"
#include "netlink.h"
#include "udp_media.h"
#include "trace.h"
#include "crypto.h"

#define MAX_ADDR_STR

static struct tipc_media * const media_info_array[] =;

static struct tipc_bearer *bearer_get(struct net *net, int bearer_id)
{}

static void bearer_disable(struct net *net, struct tipc_bearer *b);
static int tipc_l2_rcv_msg(struct sk_buff *skb, struct net_device *dev,
			   struct packet_type *pt, struct net_device *orig_dev);

/**
 * tipc_media_find - locates specified media object by name
 * @name: name to locate
 */
struct tipc_media *tipc_media_find(const char *name)
{}

/**
 * media_find_id - locates specified media object by type identifier
 * @type: type identifier to locate
 */
static struct tipc_media *media_find_id(u8 type)
{}

/**
 * tipc_media_addr_printf - record media address in print buffer
 * @buf: output buffer
 * @len: output buffer size remaining
 * @a: input media address
 */
int tipc_media_addr_printf(char *buf, int len, struct tipc_media_addr *a)
{}

/**
 * bearer_name_validate - validate & (optionally) deconstruct bearer name
 * @name: ptr to bearer name string
 * @name_parts: ptr to area for bearer name components (or NULL if not needed)
 *
 * Return: 1 if bearer name is valid, otherwise 0.
 */
static int bearer_name_validate(const char *name,
				struct tipc_bearer_names *name_parts)
{}

/**
 * tipc_bearer_find - locates bearer object with matching bearer name
 * @net: the applicable net namespace
 * @name: bearer name to locate
 */
struct tipc_bearer *tipc_bearer_find(struct net *net, const char *name)
{}

/*     tipc_bearer_get_name - get the bearer name from its id.
 *     @net: network namespace
 *     @name: a pointer to the buffer where the name will be stored.
 *     @bearer_id: the id to get the name from.
 */
int tipc_bearer_get_name(struct net *net, char *name, u32 bearer_id)
{}

void tipc_bearer_add_dest(struct net *net, u32 bearer_id, u32 dest)
{}

void tipc_bearer_remove_dest(struct net *net, u32 bearer_id, u32 dest)
{}

/**
 * tipc_enable_bearer - enable bearer with the given name
 * @net: the applicable net namespace
 * @name: bearer name to enable
 * @disc_domain: bearer domain
 * @prio: bearer priority
 * @attr: nlattr array
 * @extack: netlink extended ack
 */
static int tipc_enable_bearer(struct net *net, const char *name,
			      u32 disc_domain, u32 prio,
			      struct nlattr *attr[],
			      struct netlink_ext_ack *extack)
{}

/**
 * tipc_reset_bearer - Reset all links established over this bearer
 * @net: the applicable net namespace
 * @b: the target bearer
 */
static int tipc_reset_bearer(struct net *net, struct tipc_bearer *b)
{}

bool tipc_bearer_hold(struct tipc_bearer *b)
{}

void tipc_bearer_put(struct tipc_bearer *b)
{}

/**
 * bearer_disable - disable this bearer
 * @net: the applicable net namespace
 * @b: the bearer to disable
 *
 * Note: This routine assumes caller holds RTNL lock.
 */
static void bearer_disable(struct net *net, struct tipc_bearer *b)
{}

int tipc_enable_l2_media(struct net *net, struct tipc_bearer *b,
			 struct nlattr *attr[])
{}

/* tipc_disable_l2_media - detach TIPC bearer from an L2 interface
 * @b: the target bearer
 *
 * Mark L2 bearer as inactive so that incoming buffers are thrown away
 */
void tipc_disable_l2_media(struct tipc_bearer *b)
{}

/**
 * tipc_l2_send_msg - send a TIPC packet out over an L2 interface
 * @net: the associated network namespace
 * @skb: the packet to be sent
 * @b: the bearer through which the packet is to be sent
 * @dest: peer destination address
 */
int tipc_l2_send_msg(struct net *net, struct sk_buff *skb,
		     struct tipc_bearer *b, struct tipc_media_addr *dest)
{}

bool tipc_bearer_bcast_support(struct net *net, u32 bearer_id)
{}

int tipc_bearer_mtu(struct net *net, u32 bearer_id)
{}

int tipc_bearer_min_mtu(struct net *net, u32 bearer_id)
{}

/* tipc_bearer_xmit_skb - sends buffer to destination over bearer
 */
void tipc_bearer_xmit_skb(struct net *net, u32 bearer_id,
			  struct sk_buff *skb,
			  struct tipc_media_addr *dest)
{}

/* tipc_bearer_xmit() -send buffer to destination over bearer
 */
void tipc_bearer_xmit(struct net *net, u32 bearer_id,
		      struct sk_buff_head *xmitq,
		      struct tipc_media_addr *dst,
		      struct tipc_node *__dnode)
{}

/* tipc_bearer_bc_xmit() - broadcast buffers to all destinations
 */
void tipc_bearer_bc_xmit(struct net *net, u32 bearer_id,
			 struct sk_buff_head *xmitq)
{}

/**
 * tipc_l2_rcv_msg - handle incoming TIPC message from an interface
 * @skb: the received message
 * @dev: the net device that the packet was received on
 * @pt: the packet_type structure which was used to register this handler
 * @orig_dev: the original receive net device in case the device is a bond
 *
 * Accept only packets explicitly sent to this node, or broadcast packets;
 * ignores packets sent using interface multicast, and traffic sent to other
 * nodes (which can happen if interface is running in promiscuous mode).
 */
static int tipc_l2_rcv_msg(struct sk_buff *skb, struct net_device *dev,
			   struct packet_type *pt, struct net_device *orig_dev)
{}

/**
 * tipc_l2_device_event - handle device events from network device
 * @nb: the context of the notification
 * @evt: the type of event
 * @ptr: the net device that the event was on
 *
 * This function is called by the Ethernet driver in case of link
 * change event.
 */
static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt,
				void *ptr)
{}

static struct notifier_block notifier =;

int tipc_bearer_setup(void)
{}

void tipc_bearer_cleanup(void)
{}

void tipc_bearer_stop(struct net *net)
{}

void tipc_clone_to_loopback(struct net *net, struct sk_buff_head *pkts)
{}

static int tipc_loopback_rcv_pkt(struct sk_buff *skb, struct net_device *dev,
				 struct packet_type *pt, struct net_device *od)
{}

int tipc_attach_loopback(struct net *net)
{}

void tipc_detach_loopback(struct net *net)
{}

/* Caller should hold rtnl_lock to protect the bearer */
static int __tipc_nl_add_bearer(struct tipc_nl_msg *msg,
				struct tipc_bearer *bearer, int nlflags)
{}

int tipc_nl_bearer_dump(struct sk_buff *skb, struct netlink_callback *cb)
{}

int tipc_nl_bearer_get(struct sk_buff *skb, struct genl_info *info)
{}

int __tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info)
{}

int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info)
{}

int __tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info)
{}

int tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info)
{}

int tipc_nl_bearer_add(struct sk_buff *skb, struct genl_info *info)
{}

int __tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info)
{}

int tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info)
{}

static int __tipc_nl_add_media(struct tipc_nl_msg *msg,
			       struct tipc_media *media, int nlflags)
{}

int tipc_nl_media_dump(struct sk_buff *skb, struct netlink_callback *cb)
{}

int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info)
{}

int __tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info)
{}

int tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info)
{}