- 履歴一覧
- ソース を表示
- Toppers/Nserv は削除されています。
nservの解析
&counter([total|today|yesterday]); - 0 - 0 - 19
nservディレクトリ内のファイル†
- nserv/nserv.cfg
- それぞれの.cfgをincludeしているだけ
- #includeとINCLUDEの違いは?
- #define _MACRO_ONLYとは?
- nserv/nserv.h
- TCP送受信バッファサイズの定義
- ECHOサーバのタスク数の定義
- TCP送受信バッファのextern宣言
- nserv/nserv.c
- TCP送受信バッファ本体の宣言(配列として)
- ARPのコールバック関数の定義
IPアドレス重複時の処理
tinet/netappディレクトリ内のファイル†
tinet/netapp/dbg_cons.cfg†
- dgb_cons_taskの静的APIが書いてある
CRE_TSK(DBG_CON_TASK, {TA_HLNG | TA_ACT, 0, dbg_con_task, DBG_CON_PRIORITY, DBG_CON_STACK_SIZE, NULL});
tinet/netapp/dbg_cons.h†
tinet/netapp/dbg_cons.c†
dbg_con_task()†
- メイン関数に相当する
void
dbg_con_task (VP_INT exinf)
{
static UB line[DBG_LINE_SIZE + 1];
int len;
ID tskid;
get_tid(&tskid);
syslog(LOG_NOTICE, "[CONSOLE:%d] started.", tskid);
syscall(serial_ctl_por(CONSOLE_PORTID,
IOCTL_ECHO | IOCTL_CRLF |
IOCTL_FCSND | IOCTL_FCANY | IOCTL_FCRCV));
while (TRUE) {
len = cons_getline(line, DBG_LINE_SIZE); /* tinet/netapp/netapp_subr.cに記載 */
/* serial_rea_dat(CONSOLE_PORTID, &ch, sizeof(UB); */
/* しながら文字列にしてCRでreturn */
dbg_parse(line); /* コマンドを解釈してジャンプ */
}
}
ifコマンドの処理方法†
case 'i':
if (*(line + 1) == 'f')
ifconfig(line + 2);
break;
- ifconfigはdbg_cons.c内
static void
ifconfig (UB *line)
{
T_IFNET *ifp = IF_GET_IFNET();
T_IN4_ADDR bc;
if (*(line = skip_blanks(line))) {
T_IN4_ADDR addr, mask;
GET_IPADDR(&mask, skip_blanks(GET_IPADDR(&addr, line)));
in4_add_ifaddr(addr, mask);
}
cons_printf(CONSOLE_PORTID,
"Network Interface Configurations\n");
cons_printf(CONSOLE_PORTID,
"ether: %M\n",
IF_ETHER_NIC_GET_SOFTC()->ifaddr.lladdr);
bc = (ifp->in_ifaddr.addr & ifp->in_ifaddr.mask) | ~ifp->in_ifaddr.mask;
cons_printf(CONSOLE_PORTID,
"inet: %I, mask: %I, boadcast: %I\n",
&ifp->in_ifaddr.addr,
&ifp->in_ifaddr.mask,
&bc);
}
nrコマンドの処理方法†
- dbg_parse()->network_status()->routing_status()->routing_table_status()
static void
routing_table_status (UB *line)
{
SYSTIM now;
int ix;
cons_printf(CONSOLE_PORTID,
"Routing Table Status\n"
"IX Expire flags Prefix Target Gateway\n");
for (ix = 0; ix < NUM_STATIC_ROUTE_ENTRY; ix ++) {
cons_printf(CONSOLE_PORTID, "%2d STATIC - %6d %30I %I\n",
ix,
routing_tbl[ix].prefix_len,
&routing_tbl[ix].target,
&routing_tbl[ix].gateway);
}
/* expireの単位は[s] */
syscall(get_tim(&now));
now /= SYSTIM_HZ;
for ( ; ix < NUM_ROUTE_ENTRY; ix ++)
if (routing_tbl[ix].flags & IN_RTF_DEFINED)
cons_printf(CONSOLE_PORTID, "%2d %6d %02x %6d %30I %I\n",
ix,
(int)(routing_tbl[ix].expire - now) <= 0 ? 0 : routing_tbl[ix].expire - now,
routing_tbl[ix].flags,
routing_tbl[ix].prefix_len,
&routing_tbl[ix].target,
&routing_tbl[ix].gateway);
}
etコマンドの処理方法†
case 't': /* TCP echo client */
line += 2;
if ((error = psnd_dtq(DTQ_TCP_ECHO_CLI, (VP_INT)line)) != E_OK) /* データキューでコマンドラインを渡す */
syslog(LOG_NOTICE, "[TCP ECHO CON] error: %s",
itron_strerror(error));
break;
tinet/netapp/echo.h†
tinet/netapp/tcp_echo_cli.cfg†
tinet/netapp/tcp_echo_cli.c†