From: Fabien Chouteau <chouteau@adacore.com>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH V2 2/2] [SLIRP] Delayed IP packets
Date: Mon, 01 Aug 2011 14:50:02 +0200 [thread overview]
Message-ID: <4E36A0FA.7090505@adacore.com> (raw)
In-Reply-To: <4E32EF71.30102@siemens.com>
On 29/07/2011 19:35, Jan Kiszka wrote:
> On 2011-07-29 18:25, Fabien Chouteau wrote:
>> In the current implementation, if Slirp tries to send an IP packet to a client
>> with an unknown hardware address, the packet is simply dropped and an ARP
>> request is sent (if_encap in slirp/slirp.c).
>>
>> With this patch, Slirp will send the ARP request, re-queue the packet and try
>> to send it later. The packet is dropped after one second if the ARP reply is
>> not received.
>>
>> Signed-off-by: Fabien Chouteau <chouteau@adacore.com>
>> ---
>> slirp/if.c | 28 ++++++++++++++++++++---
>> slirp/main.h | 2 +-
>> slirp/mbuf.c | 2 +
>> slirp/mbuf.h | 2 +
>> slirp/slirp.c | 67 ++++++++++++++++++++++++++++++--------------------------
>> slirp/slirp.h | 15 ++++++++++++
>> 6 files changed, 80 insertions(+), 36 deletions(-)
>>
>> diff --git a/slirp/if.c b/slirp/if.c
>> index 0f04e13..80a5c4e 100644
>> --- a/slirp/if.c
>> +++ b/slirp/if.c
>> @@ -6,6 +6,7 @@
>> */
>>
>> #include <slirp.h>
>> +#include "qemu-timer.h"
>>
>> #define ifs_init(ifm) ((ifm)->ifs_next = (ifm)->ifs_prev = (ifm))
>>
>> @@ -105,6 +106,9 @@ if_output(struct socket *so, struct mbuf *ifm)
>> ifs_init(ifm);
>> insque(ifm, ifq);
>>
>> + /* Expiration date = Now + 1 second */
>> + ifm->expiration_date = qemu_get_clock_ns(vm_clock) + 1000000000ULL;
>
> Slirp uses rt_clock for expiry, let's stick with that clock.
OK, fixed.
>> @@ -693,54 +695,57 @@ void slirp_input(Slirp *slirp, const uint8_t *pkt, int pkt_len)
>> }
>>
>> /* output the IP packet to the ethernet device */
>> -void if_encap(Slirp *slirp, const uint8_t *ip_data, int ip_data_len)
>> +int if_encap(Slirp *slirp, struct mbuf *ifm)
>> {
>> uint8_t buf[1600];
>> struct ethhdr *eh = (struct ethhdr *)buf;
>> uint8_t ethaddr[ETH_ALEN];
>> - const struct ip *iph = (const struct ip *)ip_data;
>> + const struct ip *iph = (const struct ip *)ifm->m_data;
>>
>> - if (ip_data_len + ETH_HLEN > sizeof(buf))
>> - return;
>> + if (ifm->m_len + ETH_HLEN > sizeof(buf))
>> + return 1;
>
> Even if the old cold lacked them as well: { }
I forgot to use checkpatch.pl...
>> + memset(rah->ar_tha, 0, ETH_ALEN);
>> + /* target IP */
>> + rah->ar_tip = iph->ip_dst.s_addr;
>> + slirp->client_ipaddr = iph->ip_dst;
>> + slirp_output(slirp->opaque, arp_req, sizeof(arp_req));
>> + ifm->arp_requested = true;
>> + }
>> + return 0;
>> } else {
>> + ifm->arp_requested = false;
>
> Why? If that is required, you would have to make expiry checks depend on
> arp_requested as well - or reset the expiry date here.
>
That's right, the packet is sent so there's no need to reset this value.
Thanks for your review.
--
Fabien Chouteau
next prev parent reply other threads:[~2011-08-01 12:51 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-29 16:25 [Qemu-devel] [PATCH V2 1/2] [SLIRP] Simple ARP table Fabien Chouteau
2011-07-29 16:25 ` [Qemu-devel] [PATCH V2 2/2] [SLIRP] Delayed IP packets Fabien Chouteau
2011-07-29 17:35 ` Jan Kiszka
2011-08-01 12:50 ` Fabien Chouteau [this message]
2011-07-29 17:34 ` [Qemu-devel] [PATCH V2 1/2] [SLIRP] Simple ARP table Jan Kiszka
2011-07-30 9:09 ` Jan Kiszka
2011-07-30 9:19 ` Jan Kiszka
2011-08-01 15:03 ` Fabien Chouteau
2011-08-01 15:11 ` Jan Kiszka
2011-08-01 15:55 ` Fabien Chouteau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4E36A0FA.7090505@adacore.com \
--to=chouteau@adacore.com \
--cc=jan.kiszka@siemens.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.