diff -rc2P linux-2.4.18ctx-8/Makefile linux-2.4.18ctx-9/Makefile
*** linux-2.4.18ctx-8/Makefile Sat Mar 2 14:17:33 2002
--- linux-2.4.18ctx-9/Makefile Wed Feb 27 16:13:27 2002
***************
*** 2,6 ****
PATCHLEVEL = 4
SUBLEVEL = 18
! EXTRAVERSION =ctx-8
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
--- 2,6 ----
PATCHLEVEL = 4
SUBLEVEL = 18
! EXTRAVERSION =ctx-9
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
diff -rc2P linux-2.4.18ctx-8/fs/proc/array.c linux-2.4.18ctx-9/fs/proc/array.c
*** linux-2.4.18ctx-8/fs/proc/array.c Tue Feb 26 22:31:23 2002
--- linux-2.4.18ctx-9/fs/proc/array.c Mon Mar 18 12:13:32 2002
***************
*** 298,301 ****
--- 298,302 ----
buffer += sprintf (buffer,"s_context: %d\n",task->s_context);
buffer += sprintf (buffer,"ipv4root: %08lx\n",task->ipv4root);
+ buffer += sprintf (buffer,"ipv4root_bcast: %08lx\n",task->ipv4root_bcast);
if (task->s_info != NULL){
buffer += sprintf (buffer,"ctxticks: %d %ld %d\n"
***************
*** 312,316 ****
}
buffer += sprintf (buffer,"__NR_new_s_context: %d\n",__NR_new_s_context);
! buffer += sprintf (buffer,"__NR_set_ipv4root: %d\n",__NR_set_ipv4root);
#if defined(CONFIG_ARCH_S390)
buffer = task_show_regs(task, buffer);
--- 313,317 ----
}
buffer += sprintf (buffer,"__NR_new_s_context: %d\n",__NR_new_s_context);
! buffer += sprintf (buffer,"__NR_set_ipv4root: %d rev1\n",__NR_set_ipv4root);
#if defined(CONFIG_ARCH_S390)
buffer = task_show_regs(task, buffer);
diff -rc2P linux-2.4.18ctx-8/include/linux/sched.h linux-2.4.18ctx-9/include/linux/sched.h
*** linux-2.4.18ctx-8/include/linux/sched.h Thu Feb 28 11:58:05 2002
--- linux-2.4.18ctx-9/include/linux/sched.h Mon Mar 18 12:11:01 2002
***************
*** 435,438 ****
--- 435,439 ----
__u32 cap_bset; /* Maximum capability of this process and children */
unsigned long ipv4root; /* Process can only bind to this iP */
+ unsigned long ipv4root_bcast;
struct context_info *s_info;
void *notifier_data;
diff -rc2P linux-2.4.18ctx-8/include/net/sock.h linux-2.4.18ctx-9/include/net/sock.h
*** linux-2.4.18ctx-8/include/net/sock.h Thu Feb 28 11:59:59 2002
--- linux-2.4.18ctx-9/include/net/sock.h Mon Mar 18 12:13:37 2002
***************
*** 491,494 ****
--- 491,495 ----
__u32 daddr; /* Foreign IPv4 addr */
__u32 rcv_saddr; /* Bound local IPv4 addr */
+ __u32 bcast_addr; /* Local bcast addr, for ipv4root */
__u16 dport; /* Destination port */
unsigned short num; /* Local port */
diff -rc2P linux-2.4.18ctx-8/net/ipv4/af_inet.c linux-2.4.18ctx-9/net/ipv4/af_inet.c
*** linux-2.4.18ctx-8/net/ipv4/af_inet.c Tue Feb 26 22:31:23 2002
--- linux-2.4.18ctx-9/net/ipv4/af_inet.c Mon Mar 18 12:26:22 2002
***************
*** 481,484 ****
--- 481,485 ----
int err;
__u32 s_addr;
+ __u32 bcast_addr = 0xffffffffl;
/* If the socket has its own bind function then use it. (RAW) */
***************
*** 492,496 ****
if (current->ipv4root != 0){
// printk ("ipv4root0 %08lx %08x\n",current->ipv4root,s_addr);
! if (s_addr == 0 || s_addr == 0x0100007f){
s_addr = current->ipv4root;
}else if (s_addr != current->ipv4root){
--- 493,500 ----
if (current->ipv4root != 0){
// printk ("ipv4root0 %08lx %08x\n",current->ipv4root,s_addr);
! if (s_addr == 0){
! s_addr = current->ipv4root;
! bcast_addr = current->ipv4root_bcast;
! }else if (s_addr == 0x0100007f){
s_addr = current->ipv4root;
}else if (s_addr != current->ipv4root){
***************
*** 536,539 ****
--- 540,544 ----
sk->rcv_saddr = sk->saddr = s_addr;
+ sk->bcast_addr = bcast_addr;
if (chk_addr_ret == RTN_MULTICAST || chk_addr_ret == RTN_BROADCAST)
sk->saddr = 0; /* Use device */
diff -rc2P linux-2.4.18ctx-8/net/ipv4/udp.c linux-2.4.18ctx-9/net/ipv4/udp.c
*** linux-2.4.18ctx-8/net/ipv4/udp.c Tue Feb 26 22:31:23 2002
--- linux-2.4.18ctx-9/net/ipv4/udp.c Mon Mar 18 13:26:18 2002
***************
*** 273,277 ****
(s->daddr && s->daddr!=rmt_addr) ||
(s->dport != rmt_port && s->dport != 0) ||
! (s->rcv_saddr && s->rcv_saddr != loc_addr) ||
(s->bound_dev_if && s->bound_dev_if != dif))
continue;
--- 273,277 ----
(s->daddr && s->daddr!=rmt_addr) ||
(s->dport != rmt_port && s->dport != 0) ||
! (s->rcv_saddr && s->rcv_saddr != loc_addr && s->bcast_addr != loc_addr) ||
(s->bound_dev_if && s->bound_dev_if != dif))
continue;
diff -rc2P linux-2.4.18ctx-8/net/socket.c linux-2.4.18ctx-9/net/socket.c
*** linux-2.4.18ctx-8/net/socket.c Tue Feb 26 22:31:23 2002
--- linux-2.4.18ctx-9/net/socket.c Mon Mar 18 12:13:03 2002
***************
*** 1765,1769 ****
}
! asmlinkage int sys_set_ipv4root (unsigned long ip)
{
int ret = -EPERM;
--- 1765,1769 ----
}
! asmlinkage int sys_set_ipv4root (unsigned long ip, unsigned long bcast)
{
int ret = -EPERM;
***************
*** 1772,1775 ****
--- 1772,1776 ----
ret = 0;
current->ipv4root = ip;
+ current->ipv4root_bcast = bcast;
}
return ret;