2013-10-25: Pridana podpora LAN :) Konfigurace LAN se nastavuje v souboru /unicard/network.cfg, muze obsahovat: HWADDR - povinna polozka; bez jejiho nastaveni nelze LAN inicializovat IPADDR NETMASK - pro nastaveni site jsou obe povinne GATEWAY - nepovinna NAMESERVER - nepovinna adresa primarni DNS (sekundarni nepodporujeme) SEARCH - nepovinna implicitni domena (pokud resolver nenajde zaznam, tak zkusi za jmeno pridat tuto domenu) (max 31 znaku) DHCPBOOT - konfigurace pres DHCP; pokud je v konfiguraci tato volba uvedena, tak se ignuruji polozky IPADDR, NETMASK a GATEWAY Pokud je v konfiguraci uveden NAMESERVER, tak se pouzije jeho adresa. V opacnem pripade se nastavi adresa z DHCP. USHELL_PORT - nepovinne, pokud ma nenulovou hodnotou, tak se na tento TCP port povesi Ushell Syntaxe souboru je celkem benevolentni k ruznym kuriozitam. Po nalezeni klicoveho slova se pokusi v prvnich 50 bajtech radku rozklicovat prvni vyskyt spravne hodnoty. Jako oddelovac ciselnych hodnot lze pouzivat libovolne neciselne znaky s ASCII >= 32, nebo TAB. "IPADDRabc192 168 +/-autobus1.22.8.7.6.5.4.3.2.1" System takovy radek vyhodnoti jako "IPADDR 192.168.1.22" :) Ushell bezici na TCP ma vzdy vyssi prioritu, nez ten na USART1. Jakmile se klient pripoji, tak dojde k nasilnemu preruseni vsech prikazu a uzavreni vsech souboru, se kterymi se v tu chvili pracovalo v Ushellu na USART1. Linuxova utilita Ushell byla upravena tak, aby fungovala pres USART, i pres TCP. Jako prvni parametr lze nyni predat bud RS232 device napr. "/dev/ttyUSB0", nebo TCP adresu a port "tcp:192.168.167.80:23". Do Ushell pridany nove prikazy LANINFO, NETSTAT, ARP a LISTEN. LANINFO Vypise informace o stavu a konfiguraci LAN. Na konci vypisu posle "OK:LANINFO_DONE\n". Na kazdem radu je jeden parametr, ktery je nasledovan ': '. Pokom jiz nasleduje hodnota parametru. Aktualne jsou pri LANINFO vypisovany nasledujici informace: ENC28J60: OK|ERR|FAILED LINK: UP|DOWN|UNKNOWN HWADDR: xx:xx:xx:xx:xx:xx|UNKNOWN IFCFG: NONE|DHCP-PENDING|STATIC|DHCP DHCP-LEASED: YYYY-MM-DD HH:mm:ss * pouze pokud IFCFG = DHCP DHCP-EXPIRE: YYYY-MM-DD HH:mm:ss * pouze pokud IFCFG = DHCP IPADDR: a.b.c.d|UNKNOWN NETMASK: a.b.c.d|UNKNOWN GATEWAY: a.b.c.d|UNKNOWN DNSCFG: STATIC|DHCP|UNKNOWN DNSADDR: a.b.c.d|UNKNOWN DOMAIN: [preferovana_domena] UPORT: <0 - 65535> - port na kterem bezi Ushell UACTIVE: a.b.c.d:port|NONE - aktualni uzivatel Ushellu MSS: nnn - maximalni velikost segmentu TCPS: max/used - pocet TCP socketu UDPS: max/used - pocet UDP socketu ARPT: max/used - zaznamu v ARP tabulce LISTENP: max/used - pocet naslouchacich TCP portu NETSTAT Vypise tabulku vsech TCP a UDP socketu. Na kazdem radku je popsan jeden socket. TCP|UDP, lokalni_port, vzdalena_ip_adresa, vzdaleny_port, mss, tcp_status V pripade UDP je mss vzdy konstantni a misto tcp_status je '-'. ARP Vypise ARP tabulku. Na kazdem radku jeden zaznam. xx:xx:xx:xx:xx:xx, ip_adresa, live_time live_time je cas, ktery zbyva do smazani zaznamu v poctu sekund / 10 LISTEN Vypise seznam vsech TCP portu na kterych naslouchame. DHCP je nyni jiz plne funkcni. Jakmile je prekrocena 1/2 doby pronajmu pridelene IP, tak Unikarta zacne DHCP serveru posilat requesty, ktere zajisti opetovne prodlouzeni. V pripade ze dojde k expiraci pronajmu, tak IFCFG prejde do stavu DHCP-PENDING. Pokud je IFCFG = DHCP a je identifikovan link-down event, tak prejdeme do DHCP-PENDING. BUG: Nepodarilo se mi u ENC29J60 rozchodit interrupty pri zmene stavu linky. Proc? V inicializaci mam: EIE <= EIE_INTIE | EIE_PKTIE | EIE_LINKIE PHIE <= PHIE_PLNKIE | PHIE_PGEIE Kdykoliv mi prijde interrupt, tak v EIR je vzdy nastaven pouze TXIF a nebo PKTIF. Nikdy tam nemam nastaven LINKIF. Smazani tohoto LINKIF by melo jit provest pouze ctenim z PHIR, ale to v kodu nikde nemame. BUG: Nepodarilo se mi zadnym zpusobem aktivovat LED_B na ethernet konektoru. Je vadna? Mame chybu v zapojeni? Nepochopil jsem jak to spravne obsluhovat? S LED_A muzu blikat jak se mi zlibi... TODO: - zjistit vhodne casovani pro odesilani packetu (ted tam mam 100 ms) - zjistit spravne casovani packetu pro DHCP poll - az bude cas, tak to zmerim wiresharkem - pridat DNS resolver a naucit jej search domain - udelat konecne nejake API pro Sharpa :)