[Planetlab-devel] node manager
Thierry Parmentelat
thierry.parmentelat at sophia.inria.fr
Wed Dec 12 05:03:13 EST 2007
Daniel Hokka Zakrisson wrote:
> Hi Thierry,
>
> Quoting Thierry Parmentelat <thierry.parmentelat at sophia.inria.fr>:
>> I'm moving here the thread that started on the cvs ml
>>
>> The issues I have with nm are as follows - from this list you'll see
>> that i could use some help :-)
>>
>> - when I started digging yesterday, the external symptom was that
>> slices did not get created; at least i cound not enter the node
>> through ssh
>>
>> - there was a lot of issues related to conf_files, so upon faiyaz's
>> suggestion, and in an attempt to focus on slice creation, I have
>> commented out all modules but 'sm' in nm.py
>>
>> - I had made the indentation change because I was seing this kind of
>> messages which suggested there was something wrong with calling
>> set_ipaddresses_config. I haven't committed that back yet, but here
>> is what I now getting with the original version
>>
>> Tue Dec 11 14:41:53 2007: operation on ts_slicetest1 failed.
>> Traceback (most recent call last):
>> File "/usr/share/NodeManager/accounts.py", line 168, in _run
>> cmd[0](*cmd[1:])
>> File "/usr/share/NodeManager/accounts.py", line 129, in _ensure_created
>> if not isinstance(self._acct, next_class): self._acct =
>> next_class(rec)
>> File "/usr/share/NodeManager/sliver_vs.py", line 65, in __init__
>> self.configure(rec)
>> File "/usr/share/NodeManager/sliver_vs.py", line 83, in configure
>> self.set_resources()
>> File "/usr/share/NodeManager/sliver_vs.py", line 175, in set_resources
>> self.set_ipaddresses_config(self.rspec['ip_addresses'])
>> File "/usr/lib/python2.5/site-packages/vserver.py", line 230, in
>> set_ipaddresses_config
>> self.set_ipaddresses(addresses)
>> File "/usr/lib/python2.5/site-packages/vserver.py", line 219, in
>> set_ipaddresses
>> vserverimpl.netremove(self.ctx, "all")
>> OSError: [Errno -22] Unknown error 4294967274
>>
>> and I have no clue what this -22 error actually means
>
> EINVAL. Would be interesting to know what causes it, i.e. if it's the
> kernel or userspace.
IMHO, the issue is when vserver_net_remove calls get_mask
in our case, ip is "all" so we've just set addr.vna_type to
VC_NXA_TYPE_ANY - which is 0xff
and get_mask checks for this value to be exactly 0x01 or 0x02
unless I got it wrong again, that is..
btw: what's behind this idea of setting errno to a negative value ? that
was confusing as well...
- Thierry
=====
static PyObject *
vserver_net_remove(PyObject *self, PyObject *args)
{
struct vc_net_addr addr;
nid_t nid;
const char *ip;
if (!PyArg_ParseTuple(args, "Is", &nid, &ip))
return NULL;
if (strcmp(ip, "all") == 0)
addr.vna_type = VC_NXA_TYPE_ANY;
else if (strcmp(ip, "all4") == 0)
addr.vna_type = VC_NXA_TYPE_IPV4 | VC_NXA_TYPE_ANY;
else if (strcmp(ip, "all6") == 0)
addr.vna_type = VC_NXA_TYPE_IPV6 | VC_NXA_TYPE_ANY;
else {
if (convert_address(ip, &addr) == -1)
return PyErr_Format(PyExc_ValueError, "%s is not a valid IP
address", ip);
addr.vna_type |= VC_NXA_TYPE_ADDR;
}
switch (get_mask(&addr)) {
case -1:
return PyErr_SetFromErrno(PyExc_OSError);
}
...
===
static int
get_mask(struct vc_net_addr *addr)
{
struct ifaddrs *head, *ifa;
int ret = 0;
int family, offset, len;
void *ip;
switch (addr->vna_type) {
case VC_NXA_TYPE_IPV4:
family = AF_INET;
offset = offsetof(struct sockaddr_in, sin_addr.s_addr);
ip = &addr->vna_v4_ip.s_addr;
len = 4;
addr->vna_v4_mask.s_addr = htonl(0xffffff00);
addr->vna_prefix = 24;
break;
case VC_NXA_TYPE_IPV6:
family = AF_INET6;
offset = offsetof(struct sockaddr_in6, sin6_addr.s6_addr);
ip = addr->vna_v6_ip.s6_addr;
len = 16;
addr->vna_v6_mask.s6_addr32[9] = addr->vna_v6_mask.s6_addr32[1] =
0xffffffff;
addr->vna_v6_mask.s6_addr32[2] = addr->vna_v6_mask.s6_addr32[3] =
0x00000000;
addr->vna_prefix = 64;
break;
default:
errno = -EINVAL;
return -1;
}
...
=====
#define VC_NXA_TYPE_IPV4 0x0001
#define VC_NXA_TYPE_IPV6 0x0002
#define VC_NXA_TYPE_ANY 0x00FF
More information about the Devel
mailing list