[PATCH] fix src address for rip with IPv4

Roman Hoog Antink rha at open.ch
Wed Oct 26 00:11:33 CEST 2011


Hi there

As it turns out, my patch only fixes sending of RIP packets.
Reception of multicast RIP (at least under Linux) is still broken.

Cheers,
Roman

On 21/10/11 16:43, Roman Hoog Antink wrote:
> This patch fixes RIP under Linux with IPv4 (IPv6 not tested).
> 
> RIP could not send packets under Linux/IPv4 because the source address
> was set to the multicast destination address or the broadcast address
> respectively.
> This resulted in the following error when sending out the first packet:
>   Unexpected error at rip transmit: Invalid argument
> Eventually no RIP packet could leave the host.
> 
> Signed-off-by: Roman Hoog Antink <rha at open.ch>
> ---
>  proto/rip/rip.c |    4 +---
>  1 files changed, 1 insertions(+), 3 deletions(-)
> 
> diff --git a/proto/rip/rip.c b/proto/rip/rip.c
> index 0259cfb..a17228d 100644
> --- a/proto/rip/rip.c
> +++ b/proto/rip/rip.c
> @@ -709,15 +709,13 @@ new_iface(struct proto *p, struct iface *new,
> unsigned long flags, struct iface_
>      if (rif->multicast) {
>  #ifndef IPV6
>        rif->sock->daddr = ipa_from_u32(0xe0000009);
> -      rif->sock->saddr = ipa_from_u32(0xe0000009);
>  #else
>        rif->sock->daddr = ipa_build(0xff020000, 0, 0, 9);
> -      rif->sock->saddr = new->addr->ip;
>  #endif
>      } else {
>        rif->sock->daddr = new->addr->brd;
> -      rif->sock->saddr = new->addr->brd;
>      }
> +    rif->sock->saddr = new->addr->ip;
>    }
>     if (!ipa_nonzero(rif->sock->daddr)) {




More information about the Bird-users mailing list