/* * Copyright (c) 2009, 2017 Jeffrey Armstrong * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * This file is part of the uIP TCP/IP stack - MS-DOS FOSSIL port. * * Author: Jeffrey Armstrong * */ #include #include #include #include "fossil.h" #include "uip.h" #include "uip_arp.h" #include "slipdev.h" #include "slipfos.h" #include "mainutil.h" int common_init(char *host_ip, char *local_ip, char *netmask, char *fos_port, char *fos_speed) { int ip[4]; uip_ipaddr_t ipaddr; timer_set(&periodic_timer, CLOCK_SECOND / 2); /* Initialize the FOSSIL driver here */ printf("Initializing FOSSIL driver..."); if(slip_fossil_init(atoi(fos_speed),atoi(fos_port)) < 0) { printf("FAILED\nExiting...\n"); return 0; } printf("OK\n"); printf("Initializing SLIP interface..."); slipdev_init(); printf("OK\n"); printf("Initializing uIP stack..."); uip_init(); printf("OK\n"); /* Set IP and netmask from command line arguments */ ip_from_string(host_ip,ip); uip_ipaddr(&ipaddr, ip[0], ip[1], ip[2], ip[3]); uip_setdraddr(&ipaddr); ip_from_string(local_ip,ip); uip_ipaddr(&ipaddr, ip[0], ip[1], ip[2], ip[3]); uip_sethostaddr(&ipaddr); ip_from_string(netmask,ip); uip_ipaddr(&ipaddr, ip[0], ip[1], ip[2], ip[3]); uip_setnetmask(&ipaddr); return 1; } int ip_from_string(const char *string, int ip[4]) { char *token; char *original; int i, ret; for(i=0;i<4;i++) ip[i] = 0; if(string == NULL) return -1; original = (char *)malloc((strlen(string)+1)*sizeof(char)); memcpy(original,string,strlen(string)+1); ret = 1; token = strtok(original,"."); for(i=0;i<4;i++) { if(token == NULL) { ret = -1; break; } ip[i] = atoi(token); token = strtok(NULL,"."); } token = NULL; free(original); return ret; } void uip_log(char *m) { #ifdef DEBUG printf("uIP log message: %s\n", m); #endif }