Revert c6537d6742
Backout the tipc changes to the flags int he subscription message. These changees, while reasonable on the surface, interefere with user space ABI compatibility which is a no-no. This was part of the changes to fix the endianess issues in the TIPC protocol, which would be really nice to do but we need to do so in a way that is backwards compatible with user space. Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
d2ed817766
commit
8c97443808
@@ -127,17 +127,23 @@ static inline unsigned int tipc_node(__u32 addr)
|
|||||||
* TIPC topology subscription service definitions
|
* TIPC topology subscription service definitions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define TIPC_SUB_SERVICE 0x00 /* Filter for service availability */
|
#define TIPC_SUB_PORTS 0x01 /* filter for port availability */
|
||||||
#define TIPC_SUB_PORTS 0x01 /* Filter for port availability */
|
#define TIPC_SUB_SERVICE 0x02 /* filter for service availability */
|
||||||
#define TIPC_SUB_CANCEL 0x04 /* Cancel a subscription */
|
#define TIPC_SUB_CANCEL 0x04 /* cancel a subscription */
|
||||||
|
#if 0
|
||||||
|
/* The following filter options are not currently implemented */
|
||||||
|
#define TIPC_SUB_NO_BIND_EVTS 0x04 /* filter out "publish" events */
|
||||||
|
#define TIPC_SUB_NO_UNBIND_EVTS 0x08 /* filter out "withdraw" events */
|
||||||
|
#define TIPC_SUB_SINGLE_EVT 0x10 /* expire after first event */
|
||||||
|
#endif
|
||||||
|
|
||||||
#define TIPC_WAIT_FOREVER ~0 /* timeout for permanent subscription */
|
#define TIPC_WAIT_FOREVER ~0 /* timeout for permanent subscription */
|
||||||
|
|
||||||
struct tipc_subscr {
|
struct tipc_subscr {
|
||||||
struct tipc_name_seq seq; /* NBO. Name sequence of interest */
|
struct tipc_name_seq seq; /* name sequence of interest */
|
||||||
__u32 timeout; /* NBO. Subscription duration (in ms) */
|
__u32 timeout; /* subscription duration (in ms) */
|
||||||
__u32 filter; /* NBO. Bitmask of filter options */
|
__u32 filter; /* bitmask of filter options */
|
||||||
char usr_handle[8]; /* Opaque. Available for subscriber use */
|
char usr_handle[8]; /* available for subscriber use */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TIPC_PUBLISHED 1 /* publication event */
|
#define TIPC_PUBLISHED 1 /* publication event */
|
||||||
@@ -145,11 +151,11 @@ struct tipc_subscr {
|
|||||||
#define TIPC_SUBSCR_TIMEOUT 3 /* subscription timeout event */
|
#define TIPC_SUBSCR_TIMEOUT 3 /* subscription timeout event */
|
||||||
|
|
||||||
struct tipc_event {
|
struct tipc_event {
|
||||||
__u32 event; /* NBO. Event type, as defined above */
|
__u32 event; /* event type */
|
||||||
__u32 found_lower; /* NBO. Matching name seq instances */
|
__u32 found_lower; /* matching name seq instances */
|
||||||
__u32 found_upper; /* " " " " " */
|
__u32 found_upper; /* " " " " */
|
||||||
struct tipc_portid port; /* NBO. Associated port */
|
struct tipc_portid port; /* associated port */
|
||||||
struct tipc_subscr s; /* Original, associated subscription */
|
struct tipc_subscr s; /* associated subscription */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -274,7 +274,7 @@ static void subscr_cancel(struct tipc_subscr *s,
|
|||||||
{
|
{
|
||||||
struct subscription *sub;
|
struct subscription *sub;
|
||||||
struct subscription *sub_temp;
|
struct subscription *sub_temp;
|
||||||
__u32 type, lower, upper, timeout, filter;
|
__u32 type, lower, upper;
|
||||||
int found = 0;
|
int found = 0;
|
||||||
|
|
||||||
/* Find first matching subscription, exit if not found */
|
/* Find first matching subscription, exit if not found */
|
||||||
@@ -282,18 +282,12 @@ static void subscr_cancel(struct tipc_subscr *s,
|
|||||||
type = ntohl(s->seq.type);
|
type = ntohl(s->seq.type);
|
||||||
lower = ntohl(s->seq.lower);
|
lower = ntohl(s->seq.lower);
|
||||||
upper = ntohl(s->seq.upper);
|
upper = ntohl(s->seq.upper);
|
||||||
timeout = ntohl(s->timeout);
|
|
||||||
filter = ntohl(s->filter) & ~TIPC_SUB_CANCEL;
|
|
||||||
|
|
||||||
list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list,
|
list_for_each_entry_safe(sub, sub_temp, &subscriber->subscription_list,
|
||||||
subscription_list) {
|
subscription_list) {
|
||||||
if ((type == sub->seq.type) &&
|
if ((type == sub->seq.type) &&
|
||||||
(lower == sub->seq.lower) &&
|
(lower == sub->seq.lower) &&
|
||||||
(upper == sub->seq.upper) &&
|
(upper == sub->seq.upper)) {
|
||||||
(timeout == sub->timeout) &&
|
|
||||||
(filter == sub->filter) &&
|
|
||||||
!memcmp(s->usr_handle,sub->evt.s.usr_handle,
|
|
||||||
sizeof(s->usr_handle)) ){
|
|
||||||
found = 1;
|
found = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -310,7 +304,7 @@ static void subscr_cancel(struct tipc_subscr *s,
|
|||||||
k_term_timer(&sub->timer);
|
k_term_timer(&sub->timer);
|
||||||
spin_lock_bh(subscriber->lock);
|
spin_lock_bh(subscriber->lock);
|
||||||
}
|
}
|
||||||
dbg("Cancel: removing sub %u,%u,%u from subscriber %p list\n",
|
dbg("Cancel: removing sub %u,%u,%u from subscriber %x list\n",
|
||||||
sub->seq.type, sub->seq.lower, sub->seq.upper, subscriber);
|
sub->seq.type, sub->seq.lower, sub->seq.upper, subscriber);
|
||||||
subscr_del(sub);
|
subscr_del(sub);
|
||||||
}
|
}
|
||||||
@@ -358,7 +352,8 @@ static struct subscription *subscr_subscribe(struct tipc_subscr *s,
|
|||||||
sub->seq.upper = ntohl(s->seq.upper);
|
sub->seq.upper = ntohl(s->seq.upper);
|
||||||
sub->timeout = ntohl(s->timeout);
|
sub->timeout = ntohl(s->timeout);
|
||||||
sub->filter = ntohl(s->filter);
|
sub->filter = ntohl(s->filter);
|
||||||
if ((sub->filter && (sub->filter != TIPC_SUB_PORTS)) ||
|
if ((!(sub->filter & TIPC_SUB_PORTS) ==
|
||||||
|
!(sub->filter & TIPC_SUB_SERVICE)) ||
|
||||||
(sub->seq.lower > sub->seq.upper)) {
|
(sub->seq.lower > sub->seq.upper)) {
|
||||||
warn("Subscription rejected, illegal request\n");
|
warn("Subscription rejected, illegal request\n");
|
||||||
kfree(sub);
|
kfree(sub);
|
||||||
|
Reference in New Issue
Block a user