Skip to content

Commit

Permalink
[IPV6]: make inet6_register_protosw to return an error code
Browse files Browse the repository at this point in the history
This patch makes the inet6_register_protosw to return an error code.
The different protocols can be aware the registration was successful or
not and can pass the error to the initial caller, af_inet6.

Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Daniel Lezcano authored and David S. Miller committed Jan 28, 2008
1 parent 853cbba commit 87c3efb
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
2 changes: 1 addition & 1 deletion include/net/protocol.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ extern void inet_unregister_protosw(struct inet_protosw *p);
#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
extern int inet6_add_protocol(struct inet6_protocol *prot, unsigned char num);
extern int inet6_del_protocol(struct inet6_protocol *prot, unsigned char num);
extern void inet6_register_protosw(struct inet_protosw *p);
extern int inet6_register_protosw(struct inet_protosw *p);
extern void inet6_unregister_protosw(struct inet_protosw *p);
#endif

Expand Down
11 changes: 7 additions & 4 deletions net/ipv6/af_inet6.c
Original file line number Diff line number Diff line change
Expand Up @@ -565,21 +565,23 @@ static struct inet_protosw rawv6_protosw = {
.flags = INET_PROTOSW_REUSE,
};

void
inet6_register_protosw(struct inet_protosw *p)
int inet6_register_protosw(struct inet_protosw *p)
{
struct list_head *lh;
struct inet_protosw *answer;
int protocol = p->protocol;
struct list_head *last_perm;
int protocol = p->protocol;
int ret;

spin_lock_bh(&inetsw6_lock);

ret = -EINVAL;
if (p->type >= SOCK_MAX)
goto out_illegal;

/* If we are trying to override a permanent protocol, bail. */
answer = NULL;
ret = -EPERM;
last_perm = &inetsw6[p->type];
list_for_each(lh, &inetsw6[p->type]) {
answer = list_entry(lh, struct inet_protosw, list);
Expand All @@ -603,9 +605,10 @@ inet6_register_protosw(struct inet_protosw *p)
* system automatically returns to the old behavior.
*/
list_add_rcu(&p->list, last_perm);
ret = 0;
out:
spin_unlock_bh(&inetsw6_lock);
return;
return ret;

out_permanent:
printk(KERN_ERR "Attempt to override permanent protocol %d.\n",
Expand Down

0 comments on commit 87c3efb

Please sign in to comment.