[Users] trouble with veth device in combination with long veid

Kristian F. Høgh kfh at segtel.dk
Thu Jun 7 08:08:26 EDT 2007


On Thursday den 7. June 2007 11:32:39 Kirill Korotaev wrote:
> Kristian F. Høgh wrote:
> > On Wednesday den 6. June 2007 17:14:57 Nils Domrose wrote:
> >>Hi,
> >>
> >>we are facing a problem with veth device in combination with long veids.
> >>if we configure a veth device as described in the wiki, we are unable
> >>to start that VE with the following error:
> >
> > In veth.c a buffer with length 11 is allocated.
> > The buffer is used as follows:
> > snprintf(buf, sizeof(buf), "VEID=%d", veid);
> >
> > As 6 characters are used for static content (VEID= + '\0'), only 5
> > characters are left. Your VEID (249104) is 6 characters long.
> >
> > Apply the following patch, and you should be running.
> > (An alternative is to limit your VEID in the range 100 to <= 99999)
> >
> >
> > --- a/src/lib/veth.c
> > +++ b/src/lib/veth.c
> > @@ -90,7 +90,7 @@ static int veth_dev_remove(vps_handler *h, envid_t
> > veid, veth_dev *dev) static int run_vznetcfg(envid_t veid, veth_dev *dev)
> >  {
> > 	int ret;
> > -	char buf[11];
> > +	char buf[12];
> > 	char *argv[] = {VZNETCFG, "init", "veth", NULL, NULL};
> > 	char *env[2];
> >
> > (Last line is empty)
>
> In kernel if name is limited to 16 bytes, i.e. to 15 chars (plus zero).
> 4 chars for "veth",
I call my veth interfaces ve${VEID}.0, ve${VEID}.1 ...
So VEID 1234 will have an interface called ve1234.0 in VE0 (eth0 in VE 1234)

> so 11 chars for number. VEID is int, so limited 
> to 2^32, which is no more then 10 chars length. So everything should
> be fine except this silly bug in vzctl.
What if I call my veth interfase abcdefghij${VEID} ?

(Or do I misunderstand?)

> Why have you chosen 12 instead of 11?
> AFAICS it should be sizeof("VEID=") + 10 + 1 (for \0) = 16
I chose 12 because 11 was to small :-)
It was ment as a workaround. 16 must be right.

> Thanks,
> Kirill

Regards,
Kristian.



More information about the Users mailing list