File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / trafshow / show_if.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 16:55:18 2012 UTC (12 years, 4 months ago) by misho
Branches: trafshow, MAIN
CVS tags: v5_2_3p0, v5_2_3, HEAD
trafshow

    1: /*
    2:  *	Copyright (c) 2004 Rinet Corp., Novosibirsk, Russia
    3:  *
    4:  * Redistribution and use in source forms, with and without modification,
    5:  * are permitted provided that this entire comment appears intact.
    6:  *
    7:  * THIS SOURCE CODE IS PROVIDED ``AS IS'' WITHOUT ANY WARRANTIES OF ANY KIND.
    8:  */
    9: 
   10: #ifdef	HAVE_CONFIG_H
   11: #include <config.h>
   12: #endif
   13: 
   14: #include <stdio.h>
   15: #include <string.h>
   16: #include <pcap.h>
   17: 
   18: #include "show_if.h"
   19: #include "trafshow.h"
   20: #include "screen.h"
   21: #include "selector.h"
   22: #include "addrtoname.h"
   23: 
   24: #ifdef	notdef
   25: static void addr2str(const pcap_addr_t *ap, char *addr_buf, int addr_len);
   26: #endif
   27: 
   28: static void
   29: scale_size(name, addr, descr)
   30: 	int *name, *addr, *descr;
   31: {
   32: 	*name	= line_factor * (double)SHOW_IF_NAME;
   33: 	*addr	= line_factor * (double)SHOW_IF_ADDR;
   34: 	*descr	= line_factor * (double)SHOW_IF_DESCR;
   35: }
   36: 
   37: static int
   38: show_if_header(dst, size, unused)
   39: 	char *dst;
   40: 	int size;
   41: 	const void *unused;
   42: {
   43: 	int name_sz, addr_sz, desc_sz;
   44: 
   45: 	/* sanity check */
   46: 	if (!dst || size < 1 || unused)
   47: 		return 0;
   48: 
   49: 	scale_size(&name_sz, &addr_sz, &desc_sz);
   50: 
   51: 	snprintf(dst, size,
   52: 		 "%-*.*s %-*.*s %-*.*s",
   53: 		 name_sz, name_sz,	"Interface",
   54: 		 addr_sz, addr_sz,	"Address",
   55: 		 desc_sz, desc_sz,	"Description");
   56: 	return 0;
   57: }
   58: 
   59: #ifdef	notdef
   60: /* extract list of interface addr/mask pairs */
   61: static void
   62: addr2str(ap, addr_buf, addr_len)
   63: 	const pcap_addr_t *ap;
   64: 	char *addr_buf;
   65: 	int addr_len;
   66: {
   67: 	int i, rest;
   68: 	char *cp;
   69: 
   70: 	*addr_buf = '\0';
   71: 	cp = addr_buf;
   72: 	rest = addr_len - 1;
   73: 	for (; ap && rest > 0; ap = ap->next) {
   74: 		if (ap->addr) {
   75: 			if (*addr_buf) {
   76: 				*cp++ = ' ';
   77: 				*cp = '\0';
   78: 				rest--;
   79: 			}
   80: 			if (satoa(ap->addr, cp, rest)) {
   81: 				i = strlen(cp);
   82: 				cp += i;
   83: 				rest -= i;
   84: 			}
   85: 		}
   86: 		if (ap->netmask) {
   87: 			if (*addr_buf) {
   88: 				*cp++ = ' ';
   89: 				*cp = '\0';
   90: 				rest--;
   91: 			}
   92: 			if (satoa(ap->netmask, cp, rest)) {
   93: 				i = strlen(cp);
   94: 				cp += i;
   95: 				rest -= i;
   96: 			}
   97: 		}
   98: 	}
   99: }
  100: #endif
  101: 
  102: static int
  103: show_if_line(dst, size, ph, idx)
  104: 	char *dst;
  105: 	int size;
  106: 	const PCAP_HANDLER *ph;
  107: 	int idx;
  108: {
  109: 	int i, name_sz, addr_sz, desc_sz;
  110: 
  111: 	/* sanity check */
  112: 	if (!dst || size < 1)
  113: 		return 0;
  114: 
  115: 	*dst = '\0';
  116: 	for (i = 0; ph; ph = ph->next) {
  117: 		if (i++ == idx) break;
  118: 	}
  119: 	if (!ph) return 0;
  120: 
  121: 	scale_size(&name_sz, &addr_sz, &desc_sz);
  122: 	snprintf(dst, size,
  123: 		 "%-*.*s %-*.*s %-*.*s",
  124: 		 name_sz, name_sz,	ph->name,
  125: 		 addr_sz, addr_sz,	ph->addrstr,
  126: 		 desc_sz, desc_sz,	ph->descr ? ph->descr : "");
  127: 	return 0;
  128: }
  129: 
  130: static int
  131: show_if_footer(dst, size, unused)
  132: 	char *dst;
  133: 	int size;
  134: 	const void *unused;
  135: {
  136: 	/* sanity check */
  137: 	if (!dst || size < 1 || unused)
  138: 		return 0;
  139: 
  140: 	(void)strncpy(dst, hostname, size);
  141: 	dst[size-1] = '\0';
  142: 	return 0;
  143: }
  144: 
  145: SELECTOR *
  146: show_if_selector()
  147: {
  148: 	static SELECTOR *sp = 0;
  149: 	if (!sp && (sp = selector_init()) != 0) {
  150: 		sp->get_header = show_if_header;
  151: 		sp->get_line = show_if_line;
  152: 		sp->get_footer = show_if_footer;
  153: 	}
  154: 	return sp;
  155: }
  156: 
  157: int
  158: show_if_search(ph, str)
  159: 	PCAP_HANDLER *ph;
  160: 	const char *str;
  161: {
  162: 	int idx;
  163: 
  164: 	/* sanity check */
  165: 	if (!str || *str == '\0')
  166: 		return -1;
  167: 
  168: 	for (idx = 0; ph; ph = ph->next, idx++) {
  169: 		if (strstr(ph->name, str))
  170: 			return idx;
  171: 		if (strstr(ph->addrstr, str))
  172: 			return idx;
  173: 	}
  174: 	return -1;
  175: }
  176: 
  177: SELECTOR *
  178: show_if_list(ph)
  179: 	PCAP_HANDLER *ph;
  180: {
  181: 	SELECTOR *sp;
  182: 
  183: 	/* sanity check */
  184: 	if (!ph || (sp = show_if_selector()) == 0)
  185: 		return 0;
  186: 
  187: 	sp->header = 0; /* unused */
  188: 	sp->footer = 0; /* unused */
  189: 
  190: 	sp->list = ph;
  191: 	sp->items = 0;
  192: 	for (; ph; ph = ph->next)
  193: 		sp->items++;
  194: 
  195: 	return sp;
  196: }
  197: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>