diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/fs/pxe/pxe.c | 18 | ||||
-rw-r--r-- | core/fs/pxe/url.h | 3 |
2 files changed, 17 insertions, 4 deletions
diff --git a/core/fs/pxe/pxe.c b/core/fs/pxe/pxe.c index 9b1a7329..21763395 100644 --- a/core/fs/pxe/pxe.c +++ b/core/fs/pxe/pxe.c @@ -237,13 +237,25 @@ static uint32_t pxe_getfssec(struct file *file, char *buf, /* * Assign an IP address to a URL */ -static void url_set_ip(struct url_info *url) +__export int url_set_ip(struct url_info *url) { + int err = -ntohs(TFTP_OK); + url->ip = 0; - if (url->host) + if (url->host && url->host[0]) { url->ip = pxe_dns(url->host); - if (!url->ip) + if (!url->ip) + err = -ntohs(TFTP_ERESOLVE); + } + + /* Note: default to the server IP on resolve failure */ + if (!url->ip) { url->ip = IPInfo.serverip; + if (!url->ip) + err = -ntohs(TFTP_NONETWORK); + }make + + return err; } /** diff --git a/core/fs/pxe/url.h b/core/fs/pxe/url.h index 53984f3a..93462004 100644 --- a/core/fs/pxe/url.h +++ b/core/fs/pxe/url.h @@ -19,7 +19,7 @@ struct url_info { char *user; char *passwd; char *host; - uint32_t ip; /* Placeholder field not set by parse_url() */ + uint32_t ip; /* Not set by parse_url(), use url_set_ip() */ unsigned int port; char *path; /* Includes query */ enum url_type type; @@ -29,5 +29,6 @@ enum url_type url_type(const char *url); void parse_url(struct url_info *ui, char *url); size_t url_escape_unsafe(char *output, const char *input, size_t bufsize); char *url_unescape(char *buffer, char terminator); +int url_set_ip(struct url_info *ui); #endif /* CORE_PXE_URL_H */ |