u_short ecstd[] = { 0 };
struct uba_driver ecdriver =
{ ecprobe, 0, ecattach, 0, ecstd, "ec", ecinfo };
u_short ecstd[] = { 0 };
struct uba_driver ecdriver =
{ ecprobe, 0, ecattach, 0, ecstd, "ec", ecinfo };
#define ECUNIT(x) minor(x)
int ecinit(),ecoutput(),ecreset();
#define ECUNIT(x) minor(x)
int ecinit(),ecoutput(),ecreset();
printf("ec%d: addr=%x:%x:%x:%x:%x:%x\n", ui->ui_unit,
es->es_enaddr[0]&0xff, es->es_enaddr[1]&0xff,
es->es_enaddr[2]&0xff, es->es_enaddr[3]&0xff,
es->es_enaddr[4]&0xff, es->es_enaddr[5]&0xff);
printf("ec%d: addr=%x:%x:%x:%x:%x:%x\n", ui->ui_unit,
es->es_enaddr[0]&0xff, es->es_enaddr[1]&0xff,
es->es_enaddr[2]&0xff, es->es_enaddr[3]&0xff,
es->es_enaddr[4]&0xff, es->es_enaddr[5]&0xff);
es->es_if.if_host[0] = ((es->es_enaddr[3]&0xff)<<16) |
((es->es_enaddr[4]&0xff)<<8) | (es->es_enaddr[5]&0xff);
sin = (struct sockaddr_in *)&es->es_if.if_addr;
es->es_if.if_host[0] = ((es->es_enaddr[3]&0xff)<<16) |
((es->es_enaddr[4]&0xff)<<8) | (es->es_enaddr[5]&0xff);
sin = (struct sockaddr_in *)&es->es_if.if_addr;
- ec->ec_dhost[0] = es->es_enaddr[0];
- ec->ec_dhost[1] = es->es_enaddr[1];
- ec->ec_dhost[2] = es->es_enaddr[2];
- ec->ec_dhost[3] = (dest>>8) & 0xff;
+ if (dest & 0x8000) {
+ ec->ec_dhost[0] = ec_iltop[0];
+ ec->ec_dhost[1] = ec_iltop[1];
+ ec->ec_dhost[2] = ec_iltop[2];
+ } else {
+ ec->ec_dhost[0] = es->es_enaddr[0];
+ ec->ec_dhost[1] = es->es_enaddr[1];
+ ec->ec_dhost[2] = es->es_enaddr[2];
+ }
+ ec->ec_dhost[3] = (dest>>8) & 0x7f;
sin = (struct sockaddr_in *)&ifp->if_addr;
sin->sin_family = AF_INET;
sin->sin_addr.s_addr = addr;
sin = (struct sockaddr_in *)&ifp->if_addr;
sin->sin_family = AF_INET;
sin->sin_addr.s_addr = addr;
- ifp->if_flags = IFF_UP;
- ifp->if_output = eclhoutput; /* should never be used */
+ ifp->if_dstaddr = ifp->if_addr;
+ ifp->if_flags = IFF_UP|IFF_POINTOPOINT;
+ ifp->if_output = looutput;