You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
[TIPC] Initial merge
TIPC (Transparent Inter Process Communication) is a protocol designed for intra cluster communication. For more information see http://tipc.sourceforge.net Signed-off-by: Per Liden <per.liden@nospam.ericsson.com>
This commit is contained in:
committed by
David S. Miller
parent
58cba4650a
commit
b97bf3fd8f
@@ -186,6 +186,7 @@ struct ucred {
|
||||
#define AF_PPPOX 24 /* PPPoX sockets */
|
||||
#define AF_WANPIPE 25 /* Wanpipe API Sockets */
|
||||
#define AF_LLC 26 /* Linux LLC */
|
||||
#define AF_TIPC 30 /* TIPC sockets */
|
||||
#define AF_BLUETOOTH 31 /* Bluetooth sockets */
|
||||
#define AF_MAX 32 /* For now.. */
|
||||
|
||||
@@ -218,6 +219,7 @@ struct ucred {
|
||||
#define PF_PPPOX AF_PPPOX
|
||||
#define PF_WANPIPE AF_WANPIPE
|
||||
#define PF_LLC AF_LLC
|
||||
#define PF_TIPC AF_TIPC
|
||||
#define PF_BLUETOOTH AF_BLUETOOTH
|
||||
#define PF_MAX AF_MAX
|
||||
|
||||
@@ -279,6 +281,7 @@ struct ucred {
|
||||
#define SOL_LLC 268
|
||||
#define SOL_DCCP 269
|
||||
#define SOL_NETLINK 270
|
||||
#define SOL_TIPC 271
|
||||
|
||||
/* IPX options */
|
||||
#define IPX_TYPE 1
|
||||
|
||||
598
include/linux/tipc.h
Normal file
598
include/linux/tipc.h
Normal file
File diff suppressed because it is too large
Load Diff
255
include/net/tipc/tipc.h
Normal file
255
include/net/tipc/tipc.h
Normal file
@@ -0,0 +1,255 @@
|
||||
/*
|
||||
* include/net/tipc/tipc.h: Main include file for TIPC users
|
||||
*
|
||||
* Copyright (c) 2003-2005, Ericsson Research Canada
|
||||
* Copyright (c) 2005, Wind River Systems
|
||||
* Copyright (c) 2005-2006, Ericsson AB
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _NET_TIPC_H_
|
||||
#define _NET_TIPC_H_
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/tipc.h>
|
||||
#include <linux/skbuff.h>
|
||||
|
||||
/*
|
||||
* Native API
|
||||
* ----------
|
||||
*/
|
||||
|
||||
/*
|
||||
* TIPC operating mode routines
|
||||
*/
|
||||
|
||||
u32 tipc_get_addr(void);
|
||||
|
||||
#define TIPC_NOT_RUNNING 0
|
||||
#define TIPC_NODE_MODE 1
|
||||
#define TIPC_NET_MODE 2
|
||||
|
||||
typedef void (*tipc_mode_event)(void *usr_handle, int mode, u32 addr);
|
||||
|
||||
int tipc_attach(unsigned int *userref, tipc_mode_event, void *usr_handle);
|
||||
|
||||
void tipc_detach(unsigned int userref);
|
||||
|
||||
int tipc_get_mode(void);
|
||||
|
||||
/*
|
||||
* TIPC port manipulation routines
|
||||
*/
|
||||
|
||||
typedef void (*tipc_msg_err_event) (void *usr_handle,
|
||||
u32 portref,
|
||||
struct sk_buff **buf,
|
||||
unsigned char const *data,
|
||||
unsigned int size,
|
||||
int reason,
|
||||
struct tipc_portid const *attmpt_destid);
|
||||
|
||||
typedef void (*tipc_named_msg_err_event) (void *usr_handle,
|
||||
u32 portref,
|
||||
struct sk_buff **buf,
|
||||
unsigned char const *data,
|
||||
unsigned int size,
|
||||
int reason,
|
||||
struct tipc_name_seq const *attmpt_dest);
|
||||
|
||||
typedef void (*tipc_conn_shutdown_event) (void *usr_handle,
|
||||
u32 portref,
|
||||
struct sk_buff **buf,
|
||||
unsigned char const *data,
|
||||
unsigned int size,
|
||||
int reason);
|
||||
|
||||
typedef void (*tipc_msg_event) (void *usr_handle,
|
||||
u32 portref,
|
||||
struct sk_buff **buf,
|
||||
unsigned char const *data,
|
||||
unsigned int size,
|
||||
unsigned int importance,
|
||||
struct tipc_portid const *origin);
|
||||
|
||||
typedef void (*tipc_named_msg_event) (void *usr_handle,
|
||||
u32 portref,
|
||||
struct sk_buff **buf,
|
||||
unsigned char const *data,
|
||||
unsigned int size,
|
||||
unsigned int importance,
|
||||
struct tipc_portid const *orig,
|
||||
struct tipc_name_seq const *dest);
|
||||
|
||||
typedef void (*tipc_conn_msg_event) (void *usr_handle,
|
||||
u32 portref,
|
||||
struct sk_buff **buf,
|
||||
unsigned char const *data,
|
||||
unsigned int size);
|
||||
|
||||
typedef void (*tipc_continue_event) (void *usr_handle,
|
||||
u32 portref);
|
||||
|
||||
int tipc_createport(unsigned int tipc_user,
|
||||
void *usr_handle,
|
||||
unsigned int importance,
|
||||
tipc_msg_err_event error_cb,
|
||||
tipc_named_msg_err_event named_error_cb,
|
||||
tipc_conn_shutdown_event conn_error_cb,
|
||||
tipc_msg_event message_cb,
|
||||
tipc_named_msg_event named_message_cb,
|
||||
tipc_conn_msg_event conn_message_cb,
|
||||
tipc_continue_event continue_event_cb,/* May be zero */
|
||||
u32 *portref);
|
||||
|
||||
int tipc_deleteport(u32 portref);
|
||||
|
||||
int tipc_ownidentity(u32 portref, struct tipc_portid *port);
|
||||
|
||||
int tipc_portimportance(u32 portref, unsigned int *importance);
|
||||
int tipc_set_portimportance(u32 portref, unsigned int importance);
|
||||
|
||||
int tipc_portunreliable(u32 portref, unsigned int *isunreliable);
|
||||
int tipc_set_portunreliable(u32 portref, unsigned int isunreliable);
|
||||
|
||||
int tipc_portunreturnable(u32 portref, unsigned int *isunreturnable);
|
||||
int tipc_set_portunreturnable(u32 portref, unsigned int isunreturnable);
|
||||
|
||||
int tipc_publish(u32 portref, unsigned int scope,
|
||||
struct tipc_name_seq const *name_seq);
|
||||
int tipc_withdraw(u32 portref, unsigned int scope,
|
||||
struct tipc_name_seq const *name_seq); /* 0: all */
|
||||
|
||||
int tipc_connect2port(u32 portref, struct tipc_portid const *port);
|
||||
|
||||
int tipc_disconnect(u32 portref);
|
||||
|
||||
int tipc_shutdown(u32 ref); /* Sends SHUTDOWN msg */
|
||||
|
||||
int tipc_isconnected(u32 portref, int *isconnected);
|
||||
|
||||
int tipc_peer(u32 portref, struct tipc_portid *peer);
|
||||
|
||||
int tipc_ref_valid(u32 portref);
|
||||
|
||||
/*
|
||||
* TIPC messaging routines
|
||||
*/
|
||||
|
||||
#define TIPC_PORT_IMPORTANCE 100 /* send using current port setting */
|
||||
|
||||
|
||||
int tipc_send(u32 portref,
|
||||
unsigned int num_sect,
|
||||
struct iovec const *msg_sect);
|
||||
|
||||
int tipc_send_buf(u32 portref,
|
||||
struct sk_buff *buf,
|
||||
unsigned int dsz);
|
||||
|
||||
int tipc_send2name(u32 portref,
|
||||
struct tipc_name const *name,
|
||||
u32 domain, /* 0:own zone */
|
||||
unsigned int num_sect,
|
||||
struct iovec const *msg_sect);
|
||||
|
||||
int tipc_send_buf2name(u32 portref,
|
||||
struct tipc_name const *name,
|
||||
u32 domain,
|
||||
struct sk_buff *buf,
|
||||
unsigned int dsz);
|
||||
|
||||
int tipc_forward2name(u32 portref,
|
||||
struct tipc_name const *name,
|
||||
u32 domain, /*0: own zone */
|
||||
unsigned int section_count,
|
||||
struct iovec const *msg_sect,
|
||||
struct tipc_portid const *origin,
|
||||
unsigned int importance);
|
||||
|
||||
int tipc_forward_buf2name(u32 portref,
|
||||
struct tipc_name const *name,
|
||||
u32 domain,
|
||||
struct sk_buff *buf,
|
||||
unsigned int dsz,
|
||||
struct tipc_portid const *orig,
|
||||
unsigned int importance);
|
||||
|
||||
int tipc_send2port(u32 portref,
|
||||
struct tipc_portid const *dest,
|
||||
unsigned int num_sect,
|
||||
struct iovec const *msg_sect);
|
||||
|
||||
int tipc_send_buf2port(u32 portref,
|
||||
struct tipc_portid const *dest,
|
||||
struct sk_buff *buf,
|
||||
unsigned int dsz);
|
||||
|
||||
int tipc_forward2port(u32 portref,
|
||||
struct tipc_portid const *dest,
|
||||
unsigned int num_sect,
|
||||
struct iovec const *msg_sect,
|
||||
struct tipc_portid const *origin,
|
||||
unsigned int importance);
|
||||
|
||||
int tipc_forward_buf2port(u32 portref,
|
||||
struct tipc_portid const *dest,
|
||||
struct sk_buff *buf,
|
||||
unsigned int dsz,
|
||||
struct tipc_portid const *orig,
|
||||
unsigned int importance);
|
||||
|
||||
int tipc_multicast(u32 portref,
|
||||
struct tipc_name_seq const *seq,
|
||||
u32 domain, /* 0:own zone */
|
||||
unsigned int section_count,
|
||||
struct iovec const *msg);
|
||||
|
||||
#if 0
|
||||
int tipc_multicast_buf(u32 portref,
|
||||
struct tipc_name_seq const *seq,
|
||||
u32 domain, /* 0:own zone */
|
||||
void *buf,
|
||||
unsigned int size);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* TIPC subscription routines
|
||||
*/
|
||||
|
||||
int tipc_ispublished(struct tipc_name const *name);
|
||||
|
||||
/*
|
||||
* Get number of available nodes within specified domain (excluding own node)
|
||||
*/
|
||||
|
||||
unsigned int tipc_available_nodes(const u32 domain);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
92
include/net/tipc/tipc_bearer.h
Normal file
92
include/net/tipc/tipc_bearer.h
Normal file
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* include/net/tipc/tipc_bearer.h: Include file for privileged access to TIPC bearers
|
||||
*
|
||||
* Copyright (c) 2003-2005, Ericsson Research Canada
|
||||
* Copyright (c) 2005, Wind River Systems
|
||||
* Copyright (c) 2005-2006, Ericsson AB
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _NET_TIPC_BEARER_H_
|
||||
#define _NET_TIPC_BEARER_H_
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/tipc.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
/**
|
||||
* struct tipc_bearer - TIPC bearer info available to privileged users
|
||||
* @usr_handle: pointer to additional user-defined 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)
|
||||
*
|
||||
* Note: TIPC initializes "name" and "lock" fields; user is responsible for
|
||||
* initialization all other fields when a bearer is enabled.
|
||||
*/
|
||||
|
||||
struct tipc_bearer {
|
||||
void *usr_handle;
|
||||
u32 mtu;
|
||||
int blocked;
|
||||
spinlock_t lock;
|
||||
struct tipc_media_addr addr;
|
||||
char name[TIPC_MAX_BEARER_NAME];
|
||||
};
|
||||
|
||||
|
||||
int tipc_register_media(u32 media_type,
|
||||
char *media_name,
|
||||
int (*enable)(struct tipc_bearer *),
|
||||
void (*disable)(struct tipc_bearer *),
|
||||
int (*send_msg)(struct sk_buff *,
|
||||
struct tipc_bearer *,
|
||||
struct tipc_media_addr *),
|
||||
char *(*addr2str)(struct tipc_media_addr *a,
|
||||
char *str_buf,
|
||||
int str_size),
|
||||
struct tipc_media_addr *bcast_addr,
|
||||
const u32 bearer_priority,
|
||||
const u32 link_tolerance, /* [ms] */
|
||||
const u32 send_window_limit);
|
||||
|
||||
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);
|
||||
|
||||
int tipc_enable_bearer(const char *bearer_name, u32 bcast_scope, u32 priority);
|
||||
int tipc_disable_bearer(const char *name);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
220
include/net/tipc/tipc_msg.h
Normal file
220
include/net/tipc/tipc_msg.h
Normal file
@@ -0,0 +1,220 @@
|
||||
/*
|
||||
* include/net/tipc/tipc_msg.h: Include file for privileged access to TIPC message headers
|
||||
*
|
||||
* Copyright (c) 2003-2005, Ericsson Research Canada
|
||||
* Copyright (c) 2005, Wind River Systems
|
||||
* Copyright (c) 2005-2006, Ericsson AB
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _NET_TIPC_MSG_H_
|
||||
#define _NET_TIPC_MSG_H_
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct tipc_msg {
|
||||
u32 hdr[15];
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
TIPC user data message header format, version 2:
|
||||
|
||||
|
||||
1 0 9 8 7 6 5 4|3 2 1 0 9 8 7 6|5 4 3 2 1 0 9 8|7 6 5 4 3 2 1 0
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
w0:|vers | user |hdr sz |n|d|s|-| message size |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
w1:|mstyp| error |rer cnt|lsc|opt p| broadcast ack no |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
w2:| link level ack no | broadcast/link level seq no |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
w3:| previous node |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
w4:| originating port |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
w5:| destination port |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
w6:| originating node |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
w7:| destination node |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
w8:| name type / transport sequence number |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
w9:| name instance/multicast lower bound |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
wA:| multicast upper bound |
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
/ /
|
||||
\ options \
|
||||
/ /
|
||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
|
||||
*/
|
||||
|
||||
#define TIPC_CONN_MSG 0
|
||||
#define TIPC_MCAST_MSG 1
|
||||
#define TIPC_NAMED_MSG 2
|
||||
#define TIPC_DIRECT_MSG 3
|
||||
|
||||
|
||||
static inline u32 msg_word(struct tipc_msg *m, u32 pos)
|
||||
{
|
||||
return ntohl(m->hdr[pos]);
|
||||
}
|
||||
|
||||
static inline u32 msg_bits(struct tipc_msg *m, u32 w, u32 pos, u32 mask)
|
||||
{
|
||||
return (msg_word(m, w) >> pos) & mask;
|
||||
}
|
||||
|
||||
static inline u32 msg_importance(struct tipc_msg *m)
|
||||
{
|
||||
return msg_bits(m, 0, 25, 0xf);
|
||||
}
|
||||
|
||||
static inline u32 msg_hdr_sz(struct tipc_msg *m)
|
||||
{
|
||||
return msg_bits(m, 0, 21, 0xf) << 2;
|
||||
}
|
||||
|
||||
static inline int msg_short(struct tipc_msg *m)
|
||||
{
|
||||
return (msg_hdr_sz(m) == 24);
|
||||
}
|
||||
|
||||
static inline u32 msg_size(struct tipc_msg *m)
|
||||
{
|
||||
return msg_bits(m, 0, 0, 0x1ffff);
|
||||
}
|
||||
|
||||
static inline u32 msg_data_sz(struct tipc_msg *m)
|
||||
{
|
||||
return (msg_size(m) - msg_hdr_sz(m));
|
||||
}
|
||||
|
||||
static inline unchar *msg_data(struct tipc_msg *m)
|
||||
{
|
||||
return ((unchar *)m) + msg_hdr_sz(m);
|
||||
}
|
||||
|
||||
static inline u32 msg_type(struct tipc_msg *m)
|
||||
{
|
||||
return msg_bits(m, 1, 29, 0x7);
|
||||
}
|
||||
|
||||
static inline u32 msg_direct(struct tipc_msg *m)
|
||||
{
|
||||
return (msg_type(m) == TIPC_DIRECT_MSG);
|
||||
}
|
||||
|
||||
static inline u32 msg_named(struct tipc_msg *m)
|
||||
{
|
||||
return (msg_type(m) == TIPC_NAMED_MSG);
|
||||
}
|
||||
|
||||
static inline u32 msg_mcast(struct tipc_msg *m)
|
||||
{
|
||||
return (msg_type(m) == TIPC_MCAST_MSG);
|
||||
}
|
||||
|
||||
static inline u32 msg_connected(struct tipc_msg *m)
|
||||
{
|
||||
return (msg_type(m) == TIPC_CONN_MSG);
|
||||
}
|
||||
|
||||
static inline u32 msg_errcode(struct tipc_msg *m)
|
||||
{
|
||||
return msg_bits(m, 1, 25, 0xf);
|
||||
}
|
||||
|
||||
static inline u32 msg_prevnode(struct tipc_msg *m)
|
||||
{
|
||||
return msg_word(m, 3);
|
||||
}
|
||||
|
||||
static inline u32 msg_origport(struct tipc_msg *m)
|
||||
{
|
||||
return msg_word(m, 4);
|
||||
}
|
||||
|
||||
static inline u32 msg_destport(struct tipc_msg *m)
|
||||
{
|
||||
return msg_word(m, 5);
|
||||
}
|
||||
|
||||
static inline u32 msg_mc_netid(struct tipc_msg *m)
|
||||
{
|
||||
return msg_word(m, 5);
|
||||
}
|
||||
|
||||
static inline u32 msg_orignode(struct tipc_msg *m)
|
||||
{
|
||||
if (likely(msg_short(m)))
|
||||
return msg_prevnode(m);
|
||||
return msg_word(m, 6);
|
||||
}
|
||||
|
||||
static inline u32 msg_destnode(struct tipc_msg *m)
|
||||
{
|
||||
return msg_word(m, 7);
|
||||
}
|
||||
|
||||
static inline u32 msg_nametype(struct tipc_msg *m)
|
||||
{
|
||||
return msg_word(m, 8);
|
||||
}
|
||||
|
||||
static inline u32 msg_nameinst(struct tipc_msg *m)
|
||||
{
|
||||
return msg_word(m, 9);
|
||||
}
|
||||
|
||||
static inline u32 msg_namelower(struct tipc_msg *m)
|
||||
{
|
||||
return msg_nameinst(m);
|
||||
}
|
||||
|
||||
static inline u32 msg_nameupper(struct tipc_msg *m)
|
||||
{
|
||||
return msg_word(m, 10);
|
||||
}
|
||||
|
||||
static inline char *msg_options(struct tipc_msg *m, u32 *len)
|
||||
{
|
||||
u32 pos = msg_bits(m, 1, 16, 0x7);
|
||||
|
||||
if (!pos)
|
||||
return 0;
|
||||
pos = (pos * 4) + 28;
|
||||
*len = msg_hdr_sz(m) - pos;
|
||||
return (char *)&m->hdr[pos/4];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
105
include/net/tipc/tipc_port.h
Normal file
105
include/net/tipc/tipc_port.h
Normal file
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* include/net/tipc/tipc_port.h: Include file for privileged access to TIPC ports
|
||||
*
|
||||
* Copyright (c) 2003-2005, Ericsson Research Canada
|
||||
* Copyright (c) 2005, Wind River Systems
|
||||
* Copyright (c) 2005-2006, Ericsson AB
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _NET_TIPC_PORT_H_
|
||||
#define _NET_TIPC_PORT_H_
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/tipc.h>
|
||||
#include <linux/skbuff.h>
|
||||
#include <net/tipc/tipc_msg.h>
|
||||
|
||||
#define TIPC_FLOW_CONTROL_WIN 512
|
||||
|
||||
/**
|
||||
* struct tipc_port - native TIPC port info available to privileged users
|
||||
* @usr_handle: pointer to additional user-defined information about port
|
||||
* @lock: pointer to spinlock for controlling access to port
|
||||
* @connected: non-zero if port is currently connected to a peer port
|
||||
* @conn_type: TIPC type used when connection was established
|
||||
* @conn_instance: TIPC instance used when connection was established
|
||||
* @conn_unacked: number of unacknowledged messages received from peer port
|
||||
* @published: non-zero if port has one or more associated names
|
||||
* @congested: non-zero if cannot send because of link or port congestion
|
||||
* @ref: unique reference to port in TIPC object registry
|
||||
* @phdr: preformatted message header used when sending messages
|
||||
*/
|
||||
|
||||
struct tipc_port {
|
||||
void *usr_handle;
|
||||
spinlock_t *lock;
|
||||
int connected;
|
||||
u32 conn_type;
|
||||
u32 conn_instance;
|
||||
u32 conn_unacked;
|
||||
int published;
|
||||
u32 congested;
|
||||
u32 ref;
|
||||
struct tipc_msg phdr;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* tipc_createport_raw - create a native TIPC port and return it's reference
|
||||
*
|
||||
* Note: 'dispatcher' and 'wakeup' deliver a locked port.
|
||||
*/
|
||||
|
||||
u32 tipc_createport_raw(void *usr_handle,
|
||||
u32 (*dispatcher)(struct tipc_port *, struct sk_buff *),
|
||||
void (*wakeup)(struct tipc_port *),
|
||||
const u32 importance);
|
||||
|
||||
/*
|
||||
* tipc_set_msg_option(): port must be locked.
|
||||
*/
|
||||
int tipc_set_msg_option(struct tipc_port *tp_ptr,
|
||||
const char *opt,
|
||||
const u32 len);
|
||||
|
||||
int tipc_reject_msg(struct sk_buff *buf, u32 err);
|
||||
|
||||
int tipc_send_buf_fast(struct sk_buff *buf, u32 destnode);
|
||||
|
||||
void tipc_acknowledge(u32 port_ref,u32 ack);
|
||||
|
||||
struct tipc_port *tipc_get_port(const u32 ref);
|
||||
|
||||
void *tipc_get_handle(const u32 ref);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -159,6 +159,7 @@ source "net/ipx/Kconfig"
|
||||
source "drivers/net/appletalk/Kconfig"
|
||||
source "net/x25/Kconfig"
|
||||
source "net/lapb/Kconfig"
|
||||
source "net/tipc/Kconfig"
|
||||
|
||||
config NET_DIVERT
|
||||
bool "Frame Diverter (EXPERIMENTAL)"
|
||||
|
||||
@@ -45,6 +45,7 @@ obj-$(CONFIG_VLAN_8021Q) += 8021q/
|
||||
obj-$(CONFIG_IP_DCCP) += dccp/
|
||||
obj-$(CONFIG_IP_SCTP) += sctp/
|
||||
obj-$(CONFIG_IEEE80211) += ieee80211/
|
||||
obj-$(CONFIG_TIPC) += tipc/
|
||||
|
||||
ifeq ($(CONFIG_NET),y)
|
||||
obj-$(CONFIG_SYSCTL) += sysctl_net.o
|
||||
|
||||
112
net/tipc/Kconfig
Normal file
112
net/tipc/Kconfig
Normal file
@@ -0,0 +1,112 @@
|
||||
#
|
||||
# TIPC configuration
|
||||
#
|
||||
|
||||
menu "TIPC Configuration (EXPERIMENTAL)"
|
||||
depends on INET && EXPERIMENTAL
|
||||
|
||||
config TIPC
|
||||
tristate "The TIPC Protocol (EXPERIMENTAL)"
|
||||
---help---
|
||||
TBD.
|
||||
|
||||
This protocol support is also available as a module ( = code which
|
||||
can be inserted in and removed from the running kernel whenever you
|
||||
want). The module will be called tipc. If you want to compile it
|
||||
as a module, say M here and read <file:Documentation/modules.txt>.
|
||||
|
||||
If in doubt, say N.
|
||||
|
||||
config TIPC_ADVANCED
|
||||
bool "TIPC: Advanced configuration"
|
||||
depends on TIPC
|
||||
default n
|
||||
help
|
||||
Saying Y here will open some advanced configuration
|
||||
for TIPC. Most users do not need to bother, so if
|
||||
unsure, just say N.
|
||||
|
||||
config TIPC_ZONES
|
||||
int "Maximum number of zones in network"
|
||||
depends on TIPC && TIPC_ADVANCED
|
||||
default "3"
|
||||
help
|
||||
Max number of zones inside TIPC network. Max supported value
|
||||
is 255 zones, minimum is 1
|
||||
|
||||
Default is 3 zones in a network; setting this to higher
|
||||
allows more zones but might use more memory.
|
||||
|
||||
config TIPC_CLUSTERS
|
||||
int "Maximum number of clusters in a zone"
|
||||
depends on TIPC && TIPC_ADVANCED
|
||||
default "1"
|
||||
help
|
||||
***Only 1 (one cluster in a zone) is supported by current code.
|
||||
Any value set here will be overridden.***
|
||||
|
||||
(Max number of clusters inside TIPC zone. Max supported
|
||||
value is 4095 clusters, minimum is 1.
|
||||
|
||||
Default is 1; setting this to smaller value might save
|
||||
some memory, setting it to higher
|
||||
allows more clusters and might consume more memory.)
|
||||
|
||||
config TIPC_NODES
|
||||
int "Maximum number of nodes in cluster"
|
||||
depends on TIPC && TIPC_ADVANCED
|
||||
default "255"
|
||||
help
|
||||
Maximum number of nodes inside a TIPC cluster. Maximum
|
||||
supported value is 2047 nodes, minimum is 8.
|
||||
|
||||
Setting this to a smaller value saves some memory,
|
||||
setting it to higher allows more nodes.
|
||||
|
||||
config TIPC_SLAVE_NODES
|
||||
int "Maximum number of slave nodes in cluster"
|
||||
depends on TIPC && TIPC_ADVANCED
|
||||
default "0"
|
||||
help
|
||||
***This capability is not supported by current code.***
|
||||
|
||||
Maximum number of slave nodes inside a TIPC cluster. Maximum
|
||||
supported value is 2047 nodes, minimum is 0.
|
||||
|
||||
Setting this to a smaller value saves some memory,
|
||||
setting it to higher allows more nodes.
|
||||
|
||||
config TIPC_PORTS
|
||||
int "Maximum number of ports in a node"
|
||||
depends on TIPC && TIPC_ADVANCED
|
||||
default "8191"
|
||||
help
|
||||
Maximum number of ports within a node. Maximum
|
||||
supported value is 64535 nodes, minimum is 127.
|
||||
|
||||
Setting this to a smaller value saves some memory,
|
||||
setting it to higher allows more ports.
|
||||
|
||||
config TIPC_LOG
|
||||
int "Size of log buffer"
|
||||
depends on TIPC && TIPC_ADVANCED
|
||||
default 0
|
||||
help
|
||||
Size (in bytes) of TIPC's internal log buffer, which records the
|
||||
occurrence of significant events. Maximum supported value
|
||||
is 32768 bytes, minimum is 0.
|
||||
|
||||
There is no need to enable the log buffer unless the node will be
|
||||
managed remotely via TIPC.
|
||||
|
||||
config TIPC_DEBUG
|
||||
bool "Enable debugging support"
|
||||
depends on TIPC
|
||||
default n
|
||||
help
|
||||
This will enable debugging of TIPC.
|
||||
|
||||
Only say Y here if you are having trouble with TIPC. It will
|
||||
enable the display of detailed information about what is going on.
|
||||
|
||||
endmenu
|
||||
13
net/tipc/Makefile
Normal file
13
net/tipc/Makefile
Normal file
@@ -0,0 +1,13 @@
|
||||
#
|
||||
# Makefile for the Linux TIPC layer
|
||||
#
|
||||
|
||||
obj-$(CONFIG_TIPC) := tipc.o
|
||||
|
||||
tipc-y += addr.o bcast.o bearer.o config.o cluster.o \
|
||||
core.o handler.o link.o discover.o msg.o \
|
||||
name_distr.o subscr.o name_table.o net.o \
|
||||
netlink.o node.o node_subscr.o port.o ref.o \
|
||||
socket.o user_reg.o zone.o dbg.o eth_media.o
|
||||
|
||||
# End of file
|
||||
91
net/tipc/addr.c
Normal file
91
net/tipc/addr.c
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* net/tipc/addr.c: TIPC address utility routines
|
||||
*
|
||||
* Copyright (c) 2003-2005, Ericsson Research Canada
|
||||
* Copyright (c) 2004-2005, Wind River Systems
|
||||
* Copyright (c) 2005-2006, Ericsson AB
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* 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 "core.h"
|
||||
#include "dbg.h"
|
||||
#include "addr.h"
|
||||
#include "zone.h"
|
||||
#include "cluster.h"
|
||||
#include "net.h"
|
||||
|
||||
u32 tipc_get_addr(void)
|
||||
{
|
||||
return tipc_own_addr;
|
||||
}
|
||||
|
||||
/**
|
||||
* addr_domain_valid - validates a network domain address
|
||||
*
|
||||
* Accepts <Z.C.N>, <Z.C.0>, <Z.0.0>, and <0.0.0>,
|
||||
* where Z, C, and N are non-zero and do not exceed the configured limits.
|
||||
*
|
||||
* Returns 1 if domain address is valid, otherwise 0
|
||||
*/
|
||||
|
||||
int addr_domain_valid(u32 addr)
|
||||
{
|
||||
u32 n = tipc_node(addr);
|
||||
u32 c = tipc_cluster(addr);
|
||||
u32 z = tipc_zone(addr);
|
||||
u32 max_nodes = tipc_max_nodes;
|
||||
|
||||
if (is_slave(addr))
|
||||
max_nodes = LOWEST_SLAVE + tipc_max_slaves;
|
||||
if (n > max_nodes)
|
||||
return 0;
|
||||
if (c > tipc_max_clusters)
|
||||
return 0;
|
||||
if (z > tipc_max_zones)
|
||||
return 0;
|
||||
|
||||
if (n && (!z || !c))
|
||||
return 0;
|
||||
if (c && !z)
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* addr_node_valid - validates a proposed network address for this node
|
||||
*
|
||||
* Accepts <Z.C.N>, where Z, C, and N are non-zero and do not exceed
|
||||
* the configured limits.
|
||||
*
|
||||
* Returns 1 if address can be used, otherwise 0
|
||||
*/
|
||||
|
||||
int addr_node_valid(u32 addr)
|
||||
{
|
||||
return (addr_domain_valid(addr) && tipc_node(addr));
|
||||
}
|
||||
|
||||
125
net/tipc/addr.h
Normal file
125
net/tipc/addr.h
Normal file
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* net/tipc/addr.h: Include file for TIPC address utility routines
|
||||
*
|
||||
* Copyright (c) 2003-2005, Ericsson Research Canada
|
||||
* Copyright (c) 2004-2005, Wind River Systems
|
||||
* Copyright (c) 2005-2006, Ericsson AB
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _TIPC_ADDR_H
|
||||
#define _TIPC_ADDR_H
|
||||
|
||||
static inline u32 own_node(void)
|
||||
{
|
||||
return tipc_node(tipc_own_addr);
|
||||
}
|
||||
|
||||
static inline u32 own_cluster(void)
|
||||
{
|
||||
return tipc_cluster(tipc_own_addr);
|
||||
}
|
||||
|
||||
static inline u32 own_zone(void)
|
||||
{
|
||||
return tipc_zone(tipc_own_addr);
|
||||
}
|
||||
|
||||
static inline int in_own_cluster(u32 addr)
|
||||
{
|
||||
return !((addr ^ tipc_own_addr) >> 12);
|
||||
}
|
||||
|
||||
static inline int in_own_zone(u32 addr)
|
||||
{
|
||||
return !((addr ^ tipc_own_addr) >> 24);
|
||||
}
|
||||
|
||||
static inline int is_slave(u32 addr)
|
||||
{
|
||||
return addr & 0x800;
|
||||
}
|
||||
|
||||
static inline int may_route(u32 addr)
|
||||
{
|
||||
return(addr ^ tipc_own_addr) >> 11;
|
||||
}
|
||||
|
||||
static inline int in_scope(u32 domain, u32 addr)
|
||||
{
|
||||
if (!domain || (domain == addr))
|
||||
return 1;
|
||||
if (domain == (addr & 0xfffff000u)) /* domain <Z.C.0> */
|
||||
return 1;
|
||||
if (domain == (addr & 0xff000000u)) /* domain <Z.0.0> */
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* addr_scope - convert message lookup domain to equivalent 2-bit scope value
|
||||
*/
|
||||
|
||||
static inline int addr_scope(u32 domain)
|
||||
{
|
||||
if (likely(!domain))
|
||||
return TIPC_ZONE_SCOPE;
|
||||
if (tipc_node(domain))
|
||||
return TIPC_NODE_SCOPE;
|
||||
if (tipc_cluster(domain))
|
||||
return TIPC_CLUSTER_SCOPE;
|
||||
return TIPC_ZONE_SCOPE;
|
||||
}
|
||||
|
||||
/**
|
||||
* addr_domain - convert 2-bit scope value to equivalent message lookup domain
|
||||
*
|
||||
* Needed when address of a named message must be looked up a second time
|
||||
* after a network hop.
|
||||
*/
|
||||
|
||||
static inline int addr_domain(int sc)
|
||||
{
|
||||
if (likely(sc == TIPC_NODE_SCOPE))
|
||||
return tipc_own_addr;
|
||||
if (sc == TIPC_CLUSTER_SCOPE)
|
||||
return tipc_addr(tipc_zone(tipc_own_addr),
|
||||
tipc_cluster(tipc_own_addr), 0);
|
||||
return tipc_addr(tipc_zone(tipc_own_addr), 0, 0);
|
||||
}
|
||||
|
||||
static inline char *addr_string_fill(char *string, u32 addr)
|
||||
{
|
||||
snprintf(string, 16, "<%u.%u.%u>",
|
||||
tipc_zone(addr), tipc_cluster(addr), tipc_node(addr));
|
||||
return string;
|
||||
}
|
||||
|
||||
int addr_domain_valid(u32);
|
||||
int addr_node_valid(u32 addr);
|
||||
|
||||
#endif
|
||||
803
net/tipc/bcast.c
Normal file
803
net/tipc/bcast.c
Normal file
File diff suppressed because it is too large
Load Diff
220
net/tipc/bcast.h
Normal file
220
net/tipc/bcast.h
Normal file
@@ -0,0 +1,220 @@
|
||||
/*
|
||||
* net/tipc/bcast.h: Include file for TIPC broadcast code
|
||||
*
|
||||
* Copyright (c) 2003-2005, Ericsson Research Canada
|
||||
* Copyright (c) 2005, Wind River Systems
|
||||
* Copyright (c) 2005-2006, Ericsson AB
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _TIPC_BCAST_H
|
||||
#define _TIPC_BCAST_H
|
||||
|
||||
#define MAX_NODES 4096
|
||||
#define WSIZE 32
|
||||
|
||||
/**
|
||||
* struct node_map - set of node identifiers
|
||||
* @count: # of nodes in set
|
||||
* @map: bitmap of node identifiers that are in the set
|
||||
*/
|
||||
|
||||
struct node_map {
|
||||
u32 count;
|
||||
u32 map[MAX_NODES / WSIZE];
|
||||
};
|
||||
|
||||
|
||||
#define PLSIZE 32
|
||||
|
||||
/**
|
||||
* struct port_list - set of node local destination ports
|
||||
* @count: # of ports in set (only valid for first entry in list)
|
||||
* @next: pointer to next entry in list
|
||||
* @ports: array of port references
|
||||
*/
|
||||
|
||||
struct port_list {
|
||||
int count;
|
||||
struct port_list *next;
|
||||
u32 ports[PLSIZE];
|
||||
};
|
||||
|
||||
|
||||
struct node;
|
||||
|
||||
extern char bc_link_name[];
|
||||
|
||||
|
||||
/**
|
||||
* nmap_get - determine if node exists in a node map
|
||||
*/
|
||||
|
||||
static inline int nmap_get(struct node_map *nm_ptr, u32 node)
|
||||
{
|
||||
int n = tipc_node(node);
|
||||
int w = n / WSIZE;
|
||||
int b = n % WSIZE;
|
||||
|
||||
return nm_ptr->map[w] & (1 << b);
|
||||
}
|
||||
|
||||
/**
|
||||
* nmap_add - add a node to a node map
|
||||
*/
|
||||
|
||||
static inline void nmap_add(struct node_map *nm_ptr, u32 node)
|
||||
{
|
||||
int n = tipc_node(node);
|
||||
int w = n / WSIZE;
|
||||
u32 mask = (1 << (n % WSIZE));
|
||||
|
||||
if ((nm_ptr->map[w] & mask) == 0) {
|
||||
nm_ptr->count++;
|
||||
nm_ptr->map[w] |= mask;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* nmap_remove - remove a node from a node map
|
||||
*/
|
||||
|
||||
static inline void nmap_remove(struct node_map *nm_ptr, u32 node)
|
||||
{
|
||||
int n = tipc_node(node);
|
||||
int w = n / WSIZE;
|
||||
u32 mask = (1 << (n % WSIZE));
|
||||
|
||||
if ((nm_ptr->map[w] & mask) != 0) {
|
||||
nm_ptr->map[w] &= ~mask;
|
||||
nm_ptr->count--;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* nmap_equal - test for equality of node maps
|
||||
*/
|
||||
|
||||
static inline int nmap_equal(struct node_map *nm_a, struct node_map *nm_b)
|
||||
{
|
||||
return !memcmp(nm_a, nm_b, sizeof(*nm_a));
|
||||
}
|
||||
|
||||
/**
|
||||
* nmap_diff - find differences between node maps
|
||||
* @nm_a: input node map A
|
||||
* @nm_b: input node map B
|
||||
* @nm_diff: output node map A-B (i.e. nodes of A that are not in B)
|
||||
*/
|
||||
|
||||
static inline void nmap_diff(struct node_map *nm_a, struct node_map *nm_b,
|
||||
struct node_map *nm_diff)
|
||||
{
|
||||
int stop = sizeof(nm_a->map) / sizeof(u32);
|
||||
int w;
|
||||
int b;
|
||||
u32 map;
|
||||
|
||||
memset(nm_diff, 0, sizeof(*nm_diff));
|
||||
for (w = 0; w < stop; w++) {
|
||||
map = nm_a->map[w] ^ (nm_a->map[w] & nm_b->map[w]);
|
||||
nm_diff->map[w] = map;
|
||||
if (map != 0) {
|
||||
for (b = 0 ; b < WSIZE; b++) {
|
||||
if (map & (1 << b))
|
||||
nm_diff->count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* port_list_add - add a port to a port list, ensuring no duplicates
|
||||
*/
|
||||
|
||||
static inline void port_list_add(struct port_list *pl_ptr, u32 port)
|
||||
{
|
||||
struct port_list *item = pl_ptr;
|
||||
int i;
|
||||
int item_sz = PLSIZE;
|
||||
int cnt = pl_ptr->count;
|
||||
|
||||
for (; ; cnt -= item_sz, item = item->next) {
|
||||
if (cnt < PLSIZE)
|
||||
item_sz = cnt;
|
||||
for (i = 0; i < item_sz; i++)
|
||||
if (item->ports[i] == port)
|
||||
return;
|
||||
if (i < PLSIZE) {
|
||||
item->ports[i] = port;
|
||||
pl_ptr->count++;
|
||||
return;
|
||||
}
|
||||
if (!item->next) {
|
||||
item->next = kmalloc(sizeof(*item), GFP_ATOMIC);
|
||||
if (!item->next) {
|
||||
warn("Memory squeeze: multicast destination port list is incomplete\n");
|
||||
return;
|
||||
}
|
||||
item->next->next = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* port_list_free - free dynamically created entries in port_list chain
|
||||
*
|
||||
* Note: First item is on stack, so it doesn't need to be released
|
||||
*/
|
||||
|
||||
static inline void port_list_free(struct port_list *pl_ptr)
|
||||
{
|
||||
struct port_list *item;
|
||||
struct port_list *next;
|
||||
|
||||
for (item = pl_ptr->next; item; item = next) {
|
||||
next = item->next;
|
||||
kfree(item);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int bclink_init(void);
|
||||
void bclink_stop(void);
|
||||
void bclink_acknowledge(struct node *n_ptr, u32 acked);
|
||||
int bclink_send_msg(struct sk_buff *buf);
|
||||
void bclink_recv_pkt(struct sk_buff *buf);
|
||||
u32 bclink_get_last_sent(void);
|
||||
u32 bclink_acks_missing(struct node *n_ptr);
|
||||
void bclink_check_gap(struct node *n_ptr, u32 seqno);
|
||||
int bclink_stats(char *stats_buf, const u32 buf_size);
|
||||
int bclink_reset_stats(void);
|
||||
int bclink_set_queue_limits(u32 limit);
|
||||
void bcbearer_sort(void);
|
||||
void bcbearer_push(void);
|
||||
|
||||
#endif
|
||||
689
net/tipc/bearer.c
Normal file
689
net/tipc/bearer.c
Normal file
File diff suppressed because it is too large
Load Diff
169
net/tipc/bearer.h
Normal file
169
net/tipc/bearer.h
Normal file
@@ -0,0 +1,169 @@
|
||||
/*
|
||||
* net/tipc/bearer.h: Include file for TIPC bearer code
|
||||
*
|
||||
* Copyright (c) 2003-2005, Ericsson Research Canada
|
||||
* Copyright (c) 2005, Wind River Systems
|
||||
* Copyright (c) 2005-2006, Ericsson AB
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _TIPC_BEARER_H
|
||||
#define _TIPC_BEARER_H
|
||||
|
||||
#include <net/tipc/tipc_bearer.h>
|
||||
#include "bcast.h"
|
||||
|
||||
#define MAX_BEARERS 8
|
||||
#define MAX_MEDIA 4
|
||||
|
||||
|
||||
/**
|
||||
* struct media - TIPC media information available to internal users
|
||||
* @send_msg: routine which handles buffer transmission
|
||||
* @enable_bearer: routine which enables a bearer
|
||||
* @disable_bearer: routine which disables a bearer
|
||||
* @addr2str: routine which converts bearer's address to string form
|
||||
* @bcast_addr: media address used in broadcasting
|
||||
* @bcast: non-zero if media supports broadcasting [currently mandatory]
|
||||
* @priority: default link (and bearer) priority
|
||||
* @tolerance: default time (in ms) before declaring link failure
|
||||
* @window: default window (in packets) before declaring link congestion
|
||||
* @type_id: TIPC media identifier [defined in tipc_bearer.h]
|
||||
* @name: media name
|
||||
*/
|
||||
|
||||
struct media {
|
||||
int (*send_msg)(struct sk_buff *buf,
|
||||
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);
|
||||
char *(*addr2str)(struct tipc_media_addr *a,
|
||||
char *str_buf, int str_size);
|
||||
struct tipc_media_addr bcast_addr;
|
||||
int bcast;
|
||||
u32 priority;
|
||||
u32 tolerance;
|
||||
u32 window;
|
||||
u32 type_id;
|
||||
char name[TIPC_MAX_MEDIA_NAME];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct bearer - TIPC bearer information available to internal users
|
||||
* @publ: bearer information available to privileged users
|
||||
* @media: ptr to media structure associated with bearer
|
||||
* @priority: default link priority for bearer
|
||||
* @detect_scope: network address mask used during automatic link creation
|
||||
* @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
|
||||
* @cong_links: list of congested links associated with bearer
|
||||
* @continue_count: # of times bearer has resumed after congestion or blocking
|
||||
* @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
|
||||
*/
|
||||
|
||||
struct bearer {
|
||||
struct tipc_bearer publ;
|
||||
struct media *media;
|
||||
u32 priority;
|
||||
u32 detect_scope;
|
||||
u32 identity;
|
||||
struct link_req *link_req;
|
||||
struct list_head links;
|
||||
struct list_head cong_links;
|
||||
u32 continue_count;
|
||||
int active;
|
||||
char net_plane;
|
||||
struct node_map nodes;
|
||||
};
|
||||
|
||||
struct bearer_name {
|
||||
char media_name[TIPC_MAX_MEDIA_NAME];
|
||||
char if_name[TIPC_MAX_IF_NAME];
|
||||
};
|
||||
|
||||
struct link;
|
||||
|
||||
extern struct bearer *bearers;
|
||||
|
||||
void media_addr_printf(struct print_buf *pb, struct tipc_media_addr *a);
|
||||
struct sk_buff *media_get_names(void);
|
||||
|
||||
struct sk_buff *bearer_get_names(void);
|
||||
void bearer_add_dest(struct bearer *b_ptr, u32 dest);
|
||||
void bearer_remove_dest(struct bearer *b_ptr, u32 dest);
|
||||
void bearer_schedule(struct bearer *b_ptr, struct link *l_ptr);
|
||||
struct bearer *bearer_find_interface(const char *if_name);
|
||||
int bearer_resolve_congestion(struct bearer *b_ptr, struct link *l_ptr);
|
||||
int bearer_init(void);
|
||||
void bearer_stop(void);
|
||||
int bearer_broadcast(struct sk_buff *buf, struct tipc_bearer *b_ptr,
|
||||
struct tipc_media_addr *dest);
|
||||
void bearer_lock_push(struct bearer *b_ptr);
|
||||
|
||||
|
||||
/**
|
||||
* bearer_send- sends buffer to destination over bearer
|
||||
*
|
||||
* Returns true (1) if successful, or false (0) if unable to send
|
||||
*
|
||||
* IMPORTANT:
|
||||
* The media send routine must not alter the buffer being passed in
|
||||
* as it may be needed for later retransmission!
|
||||
*
|
||||
* If the media send routine returns a non-zero value (indicating that
|
||||
* it was unable to send the buffer), it must:
|
||||
* 1) mark the bearer as blocked,
|
||||
* 2) call tipc_continue() once the bearer is able to send again.
|
||||
* Media types that are unable to meet these two critera must ensure their
|
||||
* send routine always returns success -- even if the buffer was not sent --
|
||||
* and let TIPC's link code deal with the undelivered message.
|
||||
*/
|
||||
|
||||
static inline int bearer_send(struct bearer *b_ptr, struct sk_buff *buf,
|
||||
struct tipc_media_addr *dest)
|
||||
{
|
||||
return !b_ptr->media->send_msg(buf, &b_ptr->publ, dest);
|
||||
}
|
||||
|
||||
/**
|
||||
* bearer_congested - determines if bearer is currently congested
|
||||
*/
|
||||
|
||||
static inline int bearer_congested(struct bearer *b_ptr, struct link *l_ptr)
|
||||
{
|
||||
if (unlikely(b_ptr->publ.blocked))
|
||||
return 1;
|
||||
if (likely(list_empty(&b_ptr->cong_links)))
|
||||
return 0;
|
||||
return !bearer_resolve_congestion(b_ptr, l_ptr);
|
||||
}
|
||||
|
||||
#endif
|
||||
573
net/tipc/cluster.c
Normal file
573
net/tipc/cluster.c
Normal file
File diff suppressed because it is too large
Load Diff
89
net/tipc/cluster.h
Normal file
89
net/tipc/cluster.h
Normal file
@@ -0,0 +1,89 @@
|
||||
/*
|
||||
* net/tipc/cluster.h: Include file for TIPC cluster management routines
|
||||
*
|
||||
* Copyright (c) 2003-2005, Ericsson Research Canada
|
||||
* Copyright (c) 2005, Wind River Systems
|
||||
* Copyright (c) 2005-2006, Ericsson AB
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _TIPC_CLUSTER_H
|
||||
#define _TIPC_CLUSTER_H
|
||||
|
||||
#include "addr.h"
|
||||
#include "zone.h"
|
||||
|
||||
#define LOWEST_SLAVE 2048u
|
||||
|
||||
/**
|
||||
* struct cluster - TIPC cluster structure
|
||||
* @addr: network address of cluster
|
||||
* @owner: pointer to zone that cluster belongs to
|
||||
* @nodes: array of pointers to all nodes within cluster
|
||||
* @highest_node: id of highest numbered node within cluster
|
||||
* @highest_slave: (used for secondary node support)
|
||||
*/
|
||||
|
||||
struct cluster {
|
||||
u32 addr;
|
||||
struct _zone *owner;
|
||||
struct node **nodes;
|
||||
u32 highest_node;
|
||||
u32 highest_slave;
|
||||
};
|
||||
|
||||
|
||||
extern struct node **local_nodes;
|
||||
extern u32 highest_allowed_slave;
|
||||
extern struct node_map cluster_bcast_nodes;
|
||||
|
||||
void cluster_remove_as_router(struct cluster *c_ptr, u32 router);
|
||||
void cluster_send_ext_routes(struct cluster *c_ptr, u32 dest);
|
||||
struct node *cluster_select_node(struct cluster *c_ptr, u32 selector);
|
||||
u32 cluster_select_router(struct cluster *c_ptr, u32 ref);
|
||||
void cluster_recv_routing_table(struct sk_buff *buf);
|
||||
struct cluster *cluster_create(u32 addr);
|
||||
void cluster_delete(struct cluster *c_ptr);
|
||||
void cluster_attach_node(struct cluster *c_ptr, struct node *n_ptr);
|
||||
void cluster_send_slave_routes(struct cluster *c_ptr, u32 dest);
|
||||
void cluster_broadcast(struct sk_buff *buf);
|
||||
int cluster_init(void);
|
||||
u32 cluster_next_node(struct cluster *c_ptr, u32 addr);
|
||||
void cluster_bcast_new_route(struct cluster *c_ptr, u32 dest, u32 lo, u32 hi);
|
||||
void cluster_send_local_routes(struct cluster *c_ptr, u32 dest);
|
||||
void cluster_bcast_lost_route(struct cluster *c_ptr, u32 dest, u32 lo, u32 hi);
|
||||
|
||||
static inline struct cluster *cluster_find(u32 addr)
|
||||
{
|
||||
struct _zone *z_ptr = zone_find(addr);
|
||||
|
||||
if (z_ptr)
|
||||
return z_ptr->clusters[1];
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
715
net/tipc/config.c
Normal file
715
net/tipc/config.c
Normal file
File diff suppressed because it is too large
Load Diff
76
net/tipc/config.h
Normal file
76
net/tipc/config.h
Normal file
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* net/tipc/config.h: Include file for TIPC configuration service code
|
||||
*
|
||||
* Copyright (c) 2003-2005, Ericsson Research Canada
|
||||
* Copyright (c) 2005, Wind River Systems
|
||||
* Copyright (c) 2005-2006, Ericsson AB
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#ifndef _TIPC_CONFIG_H
|
||||
#define _TIPC_CONFIG_H
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
#include <linux/tipc.h>
|
||||
#include "link.h"
|
||||
|
||||
struct sk_buff *cfg_reply_alloc(int payload_size);
|
||||
int cfg_append_tlv(struct sk_buff *buf, int tlv_type,
|
||||
void *tlv_data, int tlv_data_size);
|
||||
struct sk_buff *cfg_reply_unsigned_type(u16 tlv_type, u32 value);
|
||||
struct sk_buff *cfg_reply_string_type(u16 tlv_type, char *string);
|
||||
|
||||
static inline struct sk_buff *cfg_reply_none(void)
|
||||
{
|
||||
return cfg_reply_alloc(0);
|
||||
}
|
||||
|
||||
static inline struct sk_buff *cfg_reply_unsigned(u32 value)
|
||||
{
|
||||
return cfg_reply_unsigned_type(TIPC_TLV_UNSIGNED, value);
|
||||
}
|
||||
|
||||
static inline struct sk_buff *cfg_reply_error_string(char *string)
|
||||
{
|
||||
return cfg_reply_string_type(TIPC_TLV_ERROR_STRING, string);
|
||||
}
|
||||
|
||||
static inline struct sk_buff *cfg_reply_ultra_string(char *string)
|
||||
{
|
||||
return cfg_reply_string_type(TIPC_TLV_ULTRA_STRING, string);
|
||||
}
|
||||
|
||||
struct sk_buff *cfg_do_cmd(u32 orig_node, u16 cmd,
|
||||
const void *req_tlv_area, int req_tlv_space,
|
||||
int headroom);
|
||||
|
||||
void cfg_link_event(u32 addr, char *name, int up);
|
||||
int cfg_init(void);
|
||||
void cfg_stop(void);
|
||||
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user