grub_ls_list_devices (int longlist)
{
grub_net_app_level_t proto;
+ int first = 1;
auto int grub_ls_print_devices (const char *name);
int grub_ls_print_devices (const char *name)
grub_device_iterate (grub_ls_print_devices);
grub_xputs ("\n");
- grub_puts_ (N_ ("Network protocols:\n"));
-
FOR_NET_APP_LEVEL (proto)
{
+ if (first)
+ grub_puts_ (N_ ("Network protocols:"));
+ first = 0;
grub_printf ("%s ", proto->name);
}
return 0;
ptr++;
}
- *ip = newip;
+ *ip = grub_cpu_to_le32 (newip);
if (rest)
*rest = ptr - 1;
return 0;
case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4:
{
grub_int32_t mask = (1 << net->ipv4.masksize) - 1;
- return ((net->ipv4.base & mask) == (addr->ipv4 & mask));
+ return ((grub_be_to_cpu32 (net->ipv4.base) & mask)
+ == (grub_be_to_cpu32 (addr->ipv4) & mask));
}
}
return 0;
switch (target->type)
{
case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4:
- grub_printf ("%d.%d.%d.%d/%d ", ((target->ipv4.base >> 24) & 0xff),
- ((target->ipv4.base >> 16) & 0xff),
- ((target->ipv4.base >> 8) & 0xff),
- ((target->ipv4.base >> 0) & 0xff),
- target->ipv4.masksize);
- break;
+ {
+ grub_uint32_t n = grub_be_to_cpu32 (target->ipv4.base);
+ grub_printf ("%d.%d.%d.%d/%d ", ((n >> 24) & 0xff),
+ ((n >> 16) & 0xff),
+ ((n >> 8) & 0xff),
+ ((n >> 0) & 0xff),
+ target->ipv4.masksize);
+ }
+ return;
}
+ grub_printf ("Unknown address type %d\n", target->type);
}
static void
switch (target->type)
{
case GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4:
- grub_printf ("%d.%d.%d.%d ", ((target->ipv4 >> 24) & 0xff),
- ((target->ipv4 >> 16) & 0xff),
- ((target->ipv4 >> 8) & 0xff),
- ((target->ipv4 >> 0) & 0xff));
- break;
+ {
+ grub_uint32_t n = grub_be_to_cpu32 (target->ipv4);
+ grub_printf ("%d.%d.%d.%d ", ((n >> 24) & 0xff),
+ ((n >> 16) & 0xff),
+ ((n >> 8) & 0xff),
+ ((n >> 0) & 0xff));
+ }
+ return;
}
+ grub_printf ("Unknown address type %d\n", target->type);
}
static grub_err_t
}
else
grub_printf ("%s", route->interface->name);
+ grub_printf ("\n");
}
return GRUB_ERR_NONE;
}
return ret;
}
}
+ grub_error (GRUB_ERR_UNKNOWN_DEVICE, "no such device");
+
return NULL;
}
static struct grub_fs grub_pxefs_fs =
{
- .name = "pxefs",
+ .name = "pxe",
.dir = grub_pxefs_dir,
.open = grub_pxefs_open,
.read = grub_pxefs_read,
addr.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4;
addr.ipv4 = grub_pxe_your_ip;
inter = grub_net_add_addr ("pxe", &grub_pxe_card, addr);
- if (grub_pxe_default_gateway_ip)
+ if (grub_pxe_default_gateway_ip != grub_pxe_default_server_ip)
{
grub_net_network_level_netaddress_t target;
grub_net_network_level_address_t gw;
target.ipv4.masksize = 32;
gw.type = GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4;
gw.ipv4 = grub_pxe_default_gateway_ip;
- grub_net_add_route_gw ("pxe_default", target, gw);
+ grub_net_add_route_gw ("pxe_gw", target, gw);
}
{
grub_net_network_level_netaddress_t target;
target.ipv4.base = grub_pxe_default_gateway_ip ?
: grub_pxe_default_server_ip;
target.ipv4.masksize = 32;
- grub_net_add_route ("pxe_default", target, inter);
+ grub_net_add_route ("pxe", target, inter);
}
}
}
dev->disk = grub_disk_open (name);
if (dev->disk)
return dev;
- if (grub_net_open)
- dev->net = grub_net_open (name);
+ if (grub_net_open && grub_errno == GRUB_ERR_UNKNOWN_DEVICE)
+ {
+ grub_errno = GRUB_ERR_NONE;
+ dev->net = grub_net_open (name);
+ }
if (dev->net)
return dev;
GRUB_NET_NETWORK_LEVEL_PROTOCOL_IPV4
} grub_network_level_protocol_id_t;
-typedef union grub_net_network_level_address
+typedef struct grub_net_network_level_address
{
grub_network_level_protocol_id_t type;
- grub_uint32_t ipv4;
+ union
+ {
+ grub_uint32_t ipv4;
+ };
} grub_net_network_level_address_t;
-typedef union grub_net_network_level_netaddress
+typedef struct grub_net_network_level_netaddress
{
grub_network_level_protocol_id_t type;
- struct {
- grub_uint32_t base;
- int masksize;
- } ipv4;
+ union
+ {
+ struct {
+ grub_uint32_t base;
+ int masksize;
+ } ipv4;
+ };
} grub_net_network_level_netaddress_t;
struct grub_net_network_level_interface;
struct grub_net_network_level_interface *next;
char *name;
struct grub_net_card *card;
- union grub_net_network_level_address address;
+ grub_net_network_level_address_t address;
void *data;
};