2006-01-02 21:04:38 +03:00
/*
* net / tipc / bearer . h : Include file for TIPC bearer code
2007-02-09 17:25:21 +03:00
*
2006-01-11 21:14:19 +03:00
* Copyright ( c ) 1996 - 2006 , Ericsson AB
2011-01-07 21:00:11 +03:00
* Copyright ( c ) 2005 , 2010 - 2011 , Wind River Systems
2006-01-02 21:04:38 +03:00
* All rights reserved .
*
2006-01-11 15:30:43 +03:00
* Redistribution and use in source and binary forms , with or without
2006-01-02 21:04:38 +03:00
* modification , are permitted provided that the following conditions are met :
*
2006-01-11 15:30:43 +03:00
* 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 .
2006-01-02 21:04:38 +03:00
*
2006-01-11 15:30:43 +03:00
* 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
2006-01-02 21:04:38 +03:00
* POSSIBILITY OF SUCH DAMAGE .
*/
# ifndef _TIPC_BEARER_H
# define _TIPC_BEARER_H
# include "bcast.h"
2011-05-27 23:09:40 +04:00
# define MAX_BEARERS 2
# define MAX_MEDIA 2
2006-01-02 21:04:38 +03:00
2011-10-07 21:37:34 +04:00
/*
* Identifiers associated with TIPC message header media address info
*
* - address info field is 20 bytes long
* - media type identifier located at offset 3
* - remaining bytes vary according to media type
*/
# define TIPC_MEDIA_ADDR_SIZE 20
# define TIPC_MEDIA_TYPE_OFFSET 3
2010-11-30 15:00:53 +03:00
/*
* Identifiers of supported TIPC media types
*/
# define TIPC_MEDIA_TYPE_ETH 1
2012-07-10 14:55:09 +04:00
/**
2011-10-07 23:19:11 +04:00
* struct tipc_media_addr - destination address used by TIPC bearers
* @ value : address info ( format defined by media )
* @ media_id : TIPC media type identifier
* @ broadcast : non - zero if address is a broadcast address
2010-11-30 15:00:53 +03:00
*/
struct tipc_media_addr {
2011-10-07 23:19:11 +04:00
u8 value [ TIPC_MEDIA_ADDR_SIZE ] ;
u8 media_id ;
u8 broadcast ;
2010-11-30 15:00:53 +03:00
} ;
2011-01-07 21:00:11 +03:00
struct tipc_bearer ;
2006-01-02 21:04:38 +03:00
/**
2011-12-30 05:19:42 +04:00
* struct tipc_media - TIPC media information available to internal users
2006-01-02 21:04:38 +03:00
* @ send_msg : routine which handles buffer transmission
* @ enable_bearer : routine which enables a bearer
* @ disable_bearer : routine which disables a bearer
2011-10-07 21:37:34 +04:00
* @ addr2str : routine which converts media address to string
* @ addr2msg : routine which converts media address to protocol message area
* @ msg2addr : routine which converts media address from protocol message area
2006-01-02 21:04:38 +03:00
* @ bcast_addr : media address used in broadcasting
* @ priority : default link ( and bearer ) priority
* @ tolerance : default time ( in ms ) before declaring link failure
* @ window : default window ( in packets ) before declaring link congestion
2010-11-30 15:00:53 +03:00
* @ type_id : TIPC media identifier
2006-01-02 21:04:38 +03:00
* @ name : media name
*/
2011-12-30 05:19:42 +04:00
struct tipc_media {
2007-02-09 17:25:21 +03:00
int ( * send_msg ) ( struct sk_buff * buf ,
2006-01-02 21:04:38 +03:00
struct tipc_bearer * b_ptr ,
struct tipc_media_addr * dest ) ;
int ( * enable_bearer ) ( struct tipc_bearer * b_ptr ) ;
void ( * disable_bearer ) ( struct tipc_bearer * b_ptr ) ;
2011-10-07 19:31:49 +04:00
int ( * addr2str ) ( struct tipc_media_addr * a , char * str_buf , int str_size ) ;
2011-10-07 21:37:34 +04:00
int ( * addr2msg ) ( struct tipc_media_addr * a , char * msg_area ) ;
2013-04-17 10:18:26 +04:00
int ( * msg2addr ) ( const struct tipc_bearer * b_ptr ,
struct tipc_media_addr * a , char * msg_area ) ;
2006-01-02 21:04:38 +03:00
u32 priority ;
u32 tolerance ;
u32 window ;
u32 type_id ;
char name [ TIPC_MAX_MEDIA_NAME ] ;
} ;
/**
2011-01-07 21:00:11 +03:00
* struct tipc_bearer - TIPC bearer structure
* @ usr_handle : pointer to additional media - specific information about bearer
* @ mtu : max packet size bearer can support
* @ blocked : non - zero if bearer is blocked
* @ lock : spinlock for controlling access to bearer
* @ addr : media - specific address associated with bearer
* @ name : bearer name ( format = media : interface )
2006-01-02 21:04:38 +03:00
* @ media : ptr to media structure associated with bearer
* @ priority : default link priority for bearer
2011-10-18 19:34:29 +04:00
* @ window : default window size for bearer
* @ tolerance : default link tolerance for bearer
2006-01-02 21:04:38 +03:00
* @ identity : array index of this bearer within TIPC bearer array
* @ link_req : ptr to ( optional ) structure making periodic link setup requests
* @ links : list of non - congested links associated with bearer
* @ active : non - zero if bearer structure is represents a bearer
* @ net_plane : network plane ( ' A ' through ' H ' ) currently associated with bearer
* @ nodes : indicates which nodes in cluster can be reached through bearer
2011-01-07 21:00:11 +03:00
*
* Note : media - specific code is responsible for initialization of the fields
* indicated below when a bearer is enabled ; TIPC ' s generic bearer code takes
* care of initializing all other fields .
2006-01-02 21:04:38 +03:00
*/
2011-01-07 21:00:11 +03:00
struct tipc_bearer {
void * usr_handle ; /* initalized by media */
u32 mtu ; /* initalized by media */
int blocked ; /* initalized by media */
struct tipc_media_addr addr ; /* initalized by media */
char name [ TIPC_MAX_BEARER_NAME ] ;
spinlock_t lock ;
2011-12-30 05:19:42 +04:00
struct tipc_media * media ;
2013-04-17 10:18:26 +04:00
struct tipc_media_addr bcast_addr ;
2006-01-02 21:04:38 +03:00
u32 priority ;
2011-10-18 19:34:29 +04:00
u32 window ;
u32 tolerance ;
2006-01-02 21:04:38 +03:00
u32 identity ;
2011-12-30 05:58:42 +04:00
struct tipc_link_req * link_req ;
2006-01-02 21:04:38 +03:00
struct list_head links ;
int active ;
char net_plane ;
2008-09-03 10:38:32 +04:00
struct tipc_node_map nodes ;
2006-01-02 21:04:38 +03:00
} ;
2011-12-30 06:39:49 +04:00
struct tipc_bearer_names {
2006-01-02 21:04:38 +03:00
char media_name [ TIPC_MAX_MEDIA_NAME ] ;
char if_name [ TIPC_MAX_IF_NAME ] ;
} ;
2011-12-30 05:58:42 +04:00
struct tipc_link ;
2006-01-02 21:04:38 +03:00
2011-01-07 21:00:11 +03:00
extern struct tipc_bearer tipc_bearers [ ] ;
2006-01-02 21:04:38 +03:00
2010-11-30 15:00:53 +03:00
/*
* TIPC routines available to supported media types
*/
2011-12-30 05:19:42 +04:00
int tipc_register_media ( struct tipc_media * m_ptr ) ;
2010-11-30 15:00:53 +03:00
void tipc_recv_msg ( struct sk_buff * buf , struct tipc_bearer * tb_ptr ) ;
int tipc_block_bearer ( const char * name ) ;
void tipc_continue ( struct tipc_bearer * tb_ptr ) ;
2011-02-28 22:56:15 +03:00
int tipc_enable_bearer ( const char * bearer_name , u32 disc_domain , u32 priority ) ;
2010-11-30 15:00:53 +03:00
int tipc_disable_bearer ( const char * name ) ;
/*
* Routines made available to TIPC by supported media types
*/
int tipc_eth_media_start ( void ) ;
void tipc_eth_media_stop ( void ) ;
2011-10-18 19:34:29 +04:00
int tipc_media_set_priority ( const char * name , u32 new_value ) ;
int tipc_media_set_window ( const char * name , u32 new_value ) ;
2012-06-29 08:50:23 +04:00
void tipc_media_addr_printf ( char * buf , int len , struct tipc_media_addr * a ) ;
2006-01-18 02:38:21 +03:00
struct sk_buff * tipc_media_get_names ( void ) ;
2006-01-02 21:04:38 +03:00
2006-01-18 02:38:21 +03:00
struct sk_buff * tipc_bearer_get_names ( void ) ;
2011-01-07 21:00:11 +03:00
void tipc_bearer_add_dest ( struct tipc_bearer * b_ptr , u32 dest ) ;
void tipc_bearer_remove_dest ( struct tipc_bearer * b_ptr , u32 dest ) ;
2011-10-18 19:34:29 +04:00
struct tipc_bearer * tipc_bearer_find ( const char * name ) ;
2011-01-07 21:00:11 +03:00
struct tipc_bearer * tipc_bearer_find_interface ( const char * if_name ) ;
2011-12-30 05:19:42 +04:00
struct tipc_media * tipc_media_find ( const char * name ) ;
2012-11-15 07:34:45 +04:00
int tipc_bearer_blocked ( struct tipc_bearer * b_ptr ) ;
2006-01-18 02:38:21 +03:00
void tipc_bearer_stop ( void ) ;
2006-01-02 21:04:38 +03:00
/**
2007-02-09 17:25:21 +03:00
* tipc_bearer_send - sends buffer to destination over bearer
*
2006-01-02 21:04:38 +03:00
* IMPORTANT :
* The media send routine must not alter the buffer being passed in
* as it may be needed for later retransmission !
*/
2012-11-15 07:34:45 +04:00
static inline void tipc_bearer_send ( struct tipc_bearer * b , struct sk_buff * buf ,
2006-01-18 02:38:21 +03:00
struct tipc_media_addr * dest )
2006-01-02 21:04:38 +03:00
{
2012-11-15 07:34:45 +04:00
b - > media - > send_msg ( buf , b , dest ) ;
2006-01-02 21:04:38 +03:00
}
2010-05-11 18:30:16 +04:00
# endif /* _TIPC_BEARER_H */