Lines Matching refs:pxe
333 pxe_regs = sdi->pxe.stack; /* Original register values */ in pxe_set_regs()
341 regs->ss = sdi->pxe.stack_seg; in pxe_set_regs()
342 regs->esp.l = sdi->pxe.stack_offs + sizeof(com32sys_t); in pxe_set_regs()
433 void pxechn_fill_pkt(struct pxelinux_opt *pxe, int ptype) in pxechn_fill_pkt() argument
442 (void **)&(pxe->p[p1].data), (size_t *)&(pxe->p[p1].len)))) { in pxechn_fill_pkt()
443 pxe->p[p2].data = malloc(2048); in pxechn_fill_pkt()
444 if (pxe->p[p2].data) { in pxechn_fill_pkt()
445 memcpy(pxe->p[p2].data, pxe->p[p1].data, pxe->p[p1].len); in pxechn_fill_pkt()
446 pxe->p[p2].len = pxe->p[p1].len; in pxechn_fill_pkt()
448 dprint_pxe_bootp_t((pxe_bootp_t *)(pxe->p[p1].data), pxe->p[p1].len); in pxechn_fill_pkt()
457 pxechn_opt_free(&pxe->p[p1]); in pxechn_fill_pkt()
461 void pxechn_init(struct pxelinux_opt *pxe) in pxechn_init() argument
464 pxe->fn = NULL; in pxechn_init()
465 pxe->fp = NULL; in pxechn_init()
466 pxe->force = 0; in pxechn_init()
467 pxe->wait = 0; in pxechn_init()
468 pxe->gip = 0; in pxechn_init()
469 pxe->wds = 0; in pxechn_init()
470 pxe->sip = 0; in pxechn_init()
471 pxe->host[0] = 0; in pxechn_init()
472 pxe->host[((NUM_DHCP_OPTS) - 1)] = 0; in pxechn_init()
475 pxe->opts[j][i].data = NULL; in pxechn_init()
476 pxe->opts[j][i].len = -1; in pxechn_init()
478 pxe->p_unpacked[j] = 0; in pxechn_init()
479 pxe->p[j].data = NULL; in pxechn_init()
480 pxe->p[j+PXECHN_NUM_PKT_TYPE].data = NULL; in pxechn_init()
481 pxe->p[j].len = 0; in pxechn_init()
482 pxe->p[j+PXECHN_NUM_PKT_TYPE].len = 0; in pxechn_init()
484 pxechn_fill_pkt(pxe, PXENV_PACKET_TYPE_CACHED_REPLY); in pxechn_init()
726 int pxechn_uuid_set(struct pxelinux_opt *pxe) in pxechn_uuid_set() argument
730 if (!pxe->p_unpacked[0]) in pxechn_uuid_set()
731 ret = dhcp_unpack_packet((pxe_bootp_t *)(pxe->p[0].data), in pxechn_uuid_set()
732 pxe->p[0].len, pxe->opts[0]); in pxechn_uuid_set()
738 if (pxe->opts[0][97].len >= 0 ) in pxechn_uuid_set()
739 pxechn_setopt(&(pxe->opts[2][97]), pxe->opts[0][97].data, pxe->opts[0][97].len); in pxechn_uuid_set()
744 int pxechn_parse_args(int argc, char *argv[], struct pxelinux_opt *pxe, in pxechn_parse_args() argument
752 if (pxe->p[5].data) in pxechn_parse_args()
753 pxe->fip = ( (pxe_bootp_t *)(pxe->p[5].data) )->sip; in pxechn_parse_args()
755 pxe->fip = 0; in pxechn_parse_args()
757 pxe->fn = argv[0]; in pxechn_parse_args()
758 pxechn_parse_fn(pxe->fn, &(pxe->fip), pxe->host, &(pxe->fp)); in pxechn_parse_args()
759 pxechn_setopt_str(&(opts[67]), pxe->fp); in pxechn_parse_args()
760 pxechn_setopt_str(&(opts[66]), pxe->host); in pxechn_parse_args()
770 pxe->force = pxechn_parse_force(optarg); in pxechn_parse_args()
773 pxe->gip = pxe_dns(optarg); in pxechn_parse_args()
784 pxe->sip = 1; in pxechn_parse_args()
796 pxechn_uuid_set(pxe); in pxechn_parse_args()
799 pxe->wait = 1; in pxechn_parse_args()
802 pxe->wds = 1; in pxechn_parse_args()
825 int pxechn_args(int argc, char *argv[], struct pxelinux_opt *pxe) in pxechn_args() argument
832 opts = pxe->opts[2]; in pxechn_args()
834 bootp0 = (pxe_bootp_t *)(pxe->p[2].data); in pxechn_args()
835 bootp1 = (pxe_bootp_t *)(pxe->p[5].data); in pxechn_args()
837 ret = dhcp_unpack_packet(bootp0, pxe->p[2].len, opts); in pxechn_args()
842 pxe->p_unpacked[2] = 1; in pxechn_args()
843 pxe->gip = bootp1->gip; in pxechn_args()
845 ret = pxechn_parse_args(argc, argv, pxe, opts); in pxechn_args()
848 if (pxe->sip > 0xFFFFFF) { /* a real IPv4 address */ in pxechn_args()
849 bootp1->sip = pxe->sip; in pxechn_args()
850 } else if ((pxe->sip == 1) in pxechn_args()
867 bootp1->sip = pxe->fip; in pxechn_args()
870 bootp1->sip = pxe->fip; in pxechn_args()
872 bootp1->gip = pxe->gip; in pxechn_args()
874 ret = dhcp_pack_packet(bootp1, (size_t *)&(pxe->p[5].len), opts); in pxechn_args()
920 int pxechn_mergeopt(struct pxelinux_opt *pxe, int d, int s) in pxechn_mergeopt() argument
928 if (!pxe->p_unpacked[s]) in pxechn_mergeopt()
929 ret = dhcp_unpack_packet(pxe->p[s].data, pxe->p[s].len, pxe->opts[s]); in pxechn_mergeopt()
934 if (pxe->p[s].len < 240) in pxechn_mergeopt()
935 printf("Packet %d is too short: %d (240)\n", s, pxe->p[s].len); in pxechn_mergeopt()
936 else if (((const struct dhcp_packet *)(pxe->p[s].data))->magic != htonl(DHCP_VENDOR_MAGIC)) in pxechn_mergeopt()
946 if (pxe->opts[d][i].len <= -1) { in pxechn_mergeopt()
947 if (pxe->opts[s][i].len >= 0) in pxechn_mergeopt()
948 pxechn_setopt(&(pxe->opts[d][i]), pxe->opts[s][i].data, pxe->opts[s][i].len); in pxechn_mergeopt()
965 struct pxelinux_opt pxe; in pxechn() local
972 pxechn_init(&pxe); in pxechn()
974 p[i] = (pxe_bootp_t *)(pxe.p[i].data); in pxechn()
978 rv = pxechn_args(argc, argv, &pxe); in pxechn()
984 printf("%s: Attempting to load '%s': ", app_name_str, pxe.fn); in pxechn()
985 if (loadfile(pxe.fn, &file.data, &file.size)) { in pxechn()
993 if ((pxe.wds) || in pxechn()
994 ((pxe.force) && ((pxe.force & (~PXECHN_FORCE_ALL)) == 0))) { in pxechn()
995 printf("Forcing behavior %08X\n", pxe.force); in pxechn()
997 if ((pxe.wds) || in pxechn()
998 (pxe.force & PXECHN_FORCE_PKT2)) { in pxechn()
999 pxechn_fill_pkt(&pxe, PXENV_PACKET_TYPE_DHCP_ACK); in pxechn()
1000 rv = pxechn_mergeopt(&pxe, 2, 1); in pxechn()
1004 rv = dhcp_pack_packet(p[5], (size_t *)&(pxe.p[5].len), pxe.opts[2]); in pxechn()
1005 rv = dhcp_pkt2pxe(p[5], pxe.p[5].len, PXENV_PACKET_TYPE_DHCP_ACK); in pxechn()
1007 if (pxe.force & PXECHN_FORCE_PKT1) { in pxechn()
1011 rv = dhcp_pkt2pxe(p[5], pxe.p[5].len, PXENV_PACKET_TYPE_CACHED_REPLY); in pxechn()
1012 dprint_pxe_bootp_t(p[5], pxe.p[5].len); in pxechn()
1013 if ((pxe.wds) || in pxechn()
1014 ((pxe.force) && ((pxe.force & (~PXECHN_FORCE_ALL)) == 0))) { in pxechn()
1017 if ((pxe.wds) || in pxechn()
1018 (pxe.force & PXECHN_FORCE_PKT2)) { in pxechn()
1019 rv = dhcp_pkt2pxe(p[5], pxe.p[5].len, PXENV_PACKET_TYPE_DHCP_ACK); in pxechn()
1021 } else if (pxe.force) { in pxechn()
1022 printf("FORCE: bad argument %08X\n", pxe.force); in pxechn()
1025 if (pxe.wait) { in pxechn()
1035 dhcp_pkt2pxe(p[2], pxe.p[2].len, PXENV_PACKET_TYPE_CACHED_REPLY); in pxechn()
1036 if (pxe.force && ((pxe.force & (~PXECHN_FORCE_ALL)) == 0)) { in pxechn()
1037 if (pxe.force & PXECHN_FORCE_PKT2) { in pxechn()
1038 rv = dhcp_pkt2pxe(p[1], pxe.p[1].len, PXENV_PACKET_TYPE_DHCP_ACK); in pxechn()
1053 struct pxelinux_opt pxe; in pxe_restart() local
1056 pxe.fn = ifn; in pxe_restart()
1057 pxechn_fill_pkt(&pxe, PXENV_PACKET_TYPE_CACHED_REPLY); in pxe_restart()
1058 if (pxe.p[5].data) in pxe_restart()
1059 pxe.fip = ( (pxe_bootp_t *)(pxe.p[5].data) )->sip; in pxe_restart()
1061 pxe.fip = 0; in pxe_restart()
1062 rv = pxechn_parse_fn(pxe.fn, &(pxe.fip), pxe.host, &(pxe.fp)); in pxe_restart()
1064 printf("%s: ERROR: Unparsable filename argument: '%s'\n\n", app_name_str, pxe.fn); in pxe_restart()
1067 printf(" Attempting to boot '%s'...\n\n", pxe.fn); in pxe_restart()
1076 pxep->ServerIPAddress = pxe.fip; in pxe_restart()
1103 struct pxelinux_opt pxe; in pxechn_gpxe() local
1107 pxechn_args(argc, argv, &pxe); in pxechn_gpxe()