check_net_config();
if (output_packet_len == 0 ||
- memcmp(bootme_ether, NetEtherNullAddr, ETH_ALEN) != 0) {
+ is_valid_ether_addr(bootme_ether)) {
/* wait for incoming packet */
net_set_udp_handler(bootme_handler);
bootme_timed_out = 0;
__func__, buf, len, &NetOurIP, bootme_src_port, &bootme_ip,
bootme_dst_port);
- if (memcmp(bootme_ether, NetEtherNullAddr, ETH_ALEN) == 0) {
+ if (is_zero_ether_addr(bootme_ether)) {
output_packet = buf;
output_packet_len = len;
/* wait for arp reply and send packet */
return 0;
}
+ if (eth->state != ETH_STATE_ACTIVE) {
+ if (eth_is_on_demand_init()) {
+ ret = eth_init(gd->bd);
+ if (ret < 0)
+ return ret;
+ eth_set_last_protocol(BOOTME);
+ } else {
+ eth_init_state_only(gd->bd);
+ }
+ }
+
assert(NetTxPacket != NULL);
pkt = (uchar *)NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE;
memcpy(pkt, buf, len);