mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
TIPC: Updated topology subscription protocol according to latest spec
This patch makes it explicit in the API that all fields in subscriptions and events exchanged with the Topology Server must be in network byte order. It also ensures that all fields of a subscription are compared when cancelling a subscription, in order to avoid inadvertent cancelling of the wrong subscription. Finally, the tipc module version is updated to 2.0.0, to reflect the API change. Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4595691455
commit
c6537d6742
3 changed files with 23 additions and 24 deletions
|
@ -274,7 +274,7 @@ static void subscr_cancel(struct tipc_subscr *s,
|
|||
{
|
||||
struct subscription *sub;
|
||||
struct subscription *sub_temp;
|
||||
__u32 type, lower, upper;
|
||||
__u32 type, lower, upper, timeout, filter;
|
||||
int found = 0;
|
||||
|
||||
/* Find first matching subscription, exit if not found */
|
||||
|
@ -282,12 +282,18 @@ static void subscr_cancel(struct tipc_subscr *s,
|
|||
type = ntohl(s->seq.type);
|
||||
lower = ntohl(s->seq.lower);
|
||||
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,
|
||||
subscription_list) {
|
||||
if ((type == sub->seq.type) &&
|
||||
(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;
|
||||
break;
|
||||
}
|
||||
|
@ -304,7 +310,7 @@ static void subscr_cancel(struct tipc_subscr *s,
|
|||
k_term_timer(&sub->timer);
|
||||
spin_lock_bh(subscriber->lock);
|
||||
}
|
||||
dbg("Cancel: removing sub %u,%u,%u from subscriber %x list\n",
|
||||
dbg("Cancel: removing sub %u,%u,%u from subscriber %p list\n",
|
||||
sub->seq.type, sub->seq.lower, sub->seq.upper, subscriber);
|
||||
subscr_del(sub);
|
||||
}
|
||||
|
@ -352,8 +358,7 @@ static struct subscription *subscr_subscribe(struct tipc_subscr *s,
|
|||
sub->seq.upper = ntohl(s->seq.upper);
|
||||
sub->timeout = ntohl(s->timeout);
|
||||
sub->filter = ntohl(s->filter);
|
||||
if ((!(sub->filter & TIPC_SUB_PORTS) ==
|
||||
!(sub->filter & TIPC_SUB_SERVICE)) ||
|
||||
if ((sub->filter && (sub->filter != TIPC_SUB_PORTS)) ||
|
||||
(sub->seq.lower > sub->seq.upper)) {
|
||||
warn("Subscription rejected, illegal request\n");
|
||||
kfree(sub);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue