Lines Matching +full:- +full:seed
2 * S390 virtio-ccw network boot loading program
6 * Based on the S390 virtio-ccw loading program (main.c)
35 #include "s390-ccw.h"
38 #include "s390-time.h"
65 return dest_timer - get_time_ms(); in get_timer()
76 * client MAC, client IP, TFTP-server MAC, TFTP-server IP,
80 * non-0 : error condition occurred.
85 int rc = -1; in dhcp()
93 printf("\b\b\b%03d", i - 1); in dhcp()
94 if (!--i) { in dhcp()
96 return -1; in dhcp()
98 fn_ip->ip_version = 4; in dhcp()
100 if (rc == -1) { in dhcp()
101 fn_ip->ip_version = 6; in dhcp()
102 set_ipv6_address(fn_ip->fd, 0); in dhcp()
105 memcpy(&fn_ip->own_ip6, get_ipv6_address(), 16); in dhcp()
109 if (rc != -1) { /* either success or non-dhcp failure */ in dhcp()
119 * Seed the random number generator with our mac and current timestamp
123 uint64_t seed; in seed_rng() local
125 asm volatile(" stck %0 " : : "Q"(seed) : "memory"); in seed_rng()
126 seed ^= (mac[2] << 24) | (mac[3] << 16) | (mac[4] << 8) | mac[5]; in seed_rng()
127 srand(seed); in seed_rng()
143 printf(" TFTP: Received %s (%d KBytes)\n", fnip->filename, rc / 1024); in tftp_load()
145 printf(" TFTP: Received %s (%d Bytes)\n", fnip->filename, rc); in tftp_load()
168 if (fn_ip->ip_version == 4) { in net_init_ip()
169 set_ipv4_address(fn_ip->own_ip); in net_init_ip()
171 } else if (rc == -2) { in net_init_ip()
173 (fn_ip->server_ip >> 24) & 0xFF, (fn_ip->server_ip >> 16) & 0xFF, in net_init_ip()
174 (fn_ip->server_ip >> 8) & 0xFF, fn_ip->server_ip & 0xFF); in net_init_ip()
175 return -102; in net_init_ip()
176 } else if (rc == -4 || rc == -3) { in net_init_ip()
178 return -107; in net_init_ip()
181 return -101; in net_init_ip()
184 if (fn_ip->ip_version == 4) { in net_init_ip()
186 (fn_ip->own_ip >> 24) & 0xFF, (fn_ip->own_ip >> 16) & 0xFF, in net_init_ip()
187 (fn_ip->own_ip >> 8) & 0xFF, fn_ip->own_ip & 0xFF); in net_init_ip()
188 } else if (fn_ip->ip_version == 6) { in net_init_ip()
190 ipv6_to_str(fn_ip->own_ip6.addr, ip6_str); in net_init_ip()
195 if (fn_ip->ip_version == 4) { in net_init_ip()
197 (fn_ip->server_ip >> 24) & 0xFF, (fn_ip->server_ip >> 16) & 0xFF, in net_init_ip()
198 (fn_ip->server_ip >> 8) & 0xFF, fn_ip->server_ip & 0xFF); in net_init_ip()
199 } else if (fn_ip->ip_version == 6) { in net_init_ip()
201 ipv6_to_str(fn_ip->server_ip6.addr, ip6_str); in net_init_ip()
205 if (strlen(fn_ip->filename) > 0) { in net_init_ip()
206 printf(" Bootfile name: '%s'\n", fn_ip->filename); in net_init_ip()
221 return -101; in net_init()
223 fn_ip->fd = rc; in net_init()
235 if (fn_ip->ip_version == 4) { in net_release()
236 dhcp_send_release(fn_ip->fd); in net_release()
258 buf = (uint8_t *)(((uint64_t)mem + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)); in get_uuid()
284 sprintf(uuid_str, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-" in get_uuid()
301 printf("Loading pxelinux.cfg entry '%s'\n", entry->label); in load_kernel_with_initrd()
303 if (!entry->kernel) { in load_kernel_with_initrd()
305 return -1; in load_kernel_with_initrd()
308 strncpy(fn_ip->filename, entry->kernel, sizeof(fn_ip->filename)); in load_kernel_with_initrd()
314 if (entry->initrd) { in load_kernel_with_initrd()
317 strncpy(fn_ip->filename, entry->initrd, sizeof(fn_ip->filename)); in load_kernel_with_initrd()
318 rc = tftp_load(fn_ip, (void *)iaddr, KERNEL_MAX_SIZE - iaddr); in load_kernel_with_initrd()
328 if (entry->append) { in load_kernel_with_initrd()
329 strncpy((char *)0x10480, entry->append, ARCH_COMMAND_LINE_SIZE); in load_kernel_with_initrd()
350 return -1; in net_try_pxelinux_cfg()
354 * Load via information from a .INS file (which can be found on CD-ROMs
360 int rc = -1, llen; in handle_ins_cfg()
367 return -1; in handle_ins_cfg()
387 return -1; in handle_ins_cfg()
390 strncpy(fn_ip->filename, insbuf, sizeof(fn_ip->filename)); in handle_ins_cfg()
392 rc = tftp_load(fn_ip, destaddr, (long)_start - (long)destaddr); in handle_ins_cfg()
405 void *loadaddr = (void *)0x2000; /* Load right after the low-core */ in net_try_direct_tftp_load()
407 rc = tftp_load(fn_ip, loadaddr, KERNEL_MAX_SIZE - (long)loadaddr); in net_try_direct_tftp_load()
411 printf("'%s' is too small (%i bytes only).\n", fn_ip->filename, rc); in net_try_direct_tftp_load()
412 return -1; in net_try_direct_tftp_load()
416 if (rc < sizeof(cfgbuf) - 1) { in net_try_direct_tftp_load()
418 cfgbuf[rc] = 0; /* Make sure that it is NUL-terminated */ in net_try_direct_tftp_load()
424 * convenience (it eases testing with the built-in DHCP server of QEMU in net_try_direct_tftp_load()
437 return -1; in net_try_direct_tftp_load()
456 if (r == 3 || r == -EIO) { in find_net_dev()
459 if (!schib->pmcw.dnv) { in find_net_dev()
469 if (dev_no < 0 || schib->pmcw.dev == dev_no) { in find_net_dev()
501 found = find_net_dev(&schib, -1); in virtio_setup()
521 return -1; in netmain()
527 return -1; in netmain()
531 if (fnlen > 0 && fn_ip.filename[fnlen - 1] != '/') { in netmain()
546 return -1; in netmain()