12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* 22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * The Regents of the University of California. All rights reserved. 42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without 62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that: (1) source code distributions 72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * retain the above copyright notice and this paragraph in its entirety, (2) 82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * distributions including binary code include the above copyright notice and 92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * this paragraph in its entirety in the documentation or other materials 102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * provided with the distribution, and (3) all advertising materials mentioning 112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * features or use of this software display the following acknowledgement: 122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ``This product includes software developed by the University of California, 132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * the University nor the names of its contributors may be used to endorse 152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * or promote products derived from this software without specific prior 162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * written permission. 172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Original code by Greg Stark <gsstark@mit.edu> 222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef lint 252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic const char rcsid[] _U_ = 262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project"@(#) $Header: /tcpdump/master/tcpdump/print-pppoe.c,v 1.30.2.1 2005/04/26 19:48:56 guy Exp $ (LBL)"; 272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifdef HAVE_CONFIG_H 302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "config.h" 312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif 322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <tcpdump-stdinc.h> 342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <stdio.h> 362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include <string.h> 372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "interface.h" 392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "addrtoname.h" 402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "ppp.h" 412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "ethertype.h" 422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "ether.h" 432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#include "extract.h" /* must come after interface.h */ 442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Codes */ 462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectenum { 472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_PADI = 0x09, 482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_PADO = 0x07, 492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_PADR = 0x19, 502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_PADS = 0x65, 512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_PADT = 0xa7 522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct tok pppoecode2str[] = { 552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_PADI, "PADI" }, 562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_PADO, "PADO" }, 572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_PADR, "PADR" }, 582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_PADS, "PADS" }, 592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_PADT, "PADT" }, 602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, "" }, /* PPP Data */ 612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL } 622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/* Tags */ 652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectenum { 662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_EOL = 0, 672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_SERVICE_NAME = 0x0101, 682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_AC_NAME = 0x0102, 692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_HOST_UNIQ = 0x0103, 702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_AC_COOKIE = 0x0104, 712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_VENDOR = 0x0105, 722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_RELAY_SID = 0x0110, 732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_SERVICE_NAME_ERROR = 0x0201, 742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_AC_SYSTEM_ERROR = 0x0202, 752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project PPPOE_GENERIC_ERROR = 0x0203 762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstatic struct tok pppoetag2str[] = { 792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_EOL, "EOL" }, 802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_SERVICE_NAME, "Service-Name" }, 812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_AC_NAME, "AC-Name" }, 822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_HOST_UNIQ, "Host-Uniq" }, 832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_AC_COOKIE, "AC-Cookie" }, 842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_VENDOR, "Vendor-Specific" }, 852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_RELAY_SID, "Relay-Session-ID" }, 862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_SERVICE_NAME_ERROR, "Service-Name-Error" }, 872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_AC_SYSTEM_ERROR, "AC-System-Error" }, 882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { PPPOE_GENERIC_ERROR, "Generic-Error" }, 892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project { 0, NULL } 902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project}; 912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define PPPOE_HDRLEN 6 932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define MAXTAGPRINT 80 942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectu_int 962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectpppoe_if_print(const struct pcap_pkthdr *h, register const u_char *p) 972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (pppoe_print(p, h->len)); 992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 1002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectu_int 1022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectpppoe_print(register const u_char *bp, u_int length) 1032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project{ 1042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int16_t pppoe_ver, pppoe_type, pppoe_code, pppoe_sessionid; 1052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_int pppoe_length; 1062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *pppoe_packet, *pppoe_payload; 1072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (length < PPPOE_HDRLEN) { 1092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (void)printf("truncated-pppoe %u", length); 1102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (length); 1112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project length -= PPPOE_HDRLEN; 1132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pppoe_packet = bp; 1142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(*pppoe_packet, PPPOE_HDRLEN); 1152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pppoe_ver = (pppoe_packet[0] & 0xF0) >> 4; 1162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pppoe_type = (pppoe_packet[0] & 0x0F); 1172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pppoe_code = pppoe_packet[1]; 1182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pppoe_sessionid = EXTRACT_16BITS(pppoe_packet + 2); 1192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pppoe_length = EXTRACT_16BITS(pppoe_packet + 4); 1202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pppoe_payload = pppoe_packet + PPPOE_HDRLEN; 1212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (pppoe_ver != 1) { 1232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [ver %d]",pppoe_ver); 1242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (pppoe_type != 1) { 1262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [type %d]",pppoe_type); 1272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("PPPoE %s", tok2str(pppoecode2str, "PAD-%x", pppoe_code)); 1302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (pppoe_code == PPPOE_PADI && pppoe_length > 1484 - PPPOE_HDRLEN) { 1312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [len %u!]",pppoe_length); 1322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (pppoe_length > length) { 1342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [len %u > %u!]", pppoe_length, length); 1352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project pppoe_length = length; 1362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (pppoe_sessionid) { 1382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [ses 0x%x]", pppoe_sessionid); 1392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (pppoe_code) { 1422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* PPP session packets don't contain tags */ 1432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project u_short tag_type = 0xffff, tag_len; 1442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *p = pppoe_payload; 1452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* 1472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * loop invariant: 1482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * p points to current tag, 1492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * tag_type is previous tag or 0xffff for first iteration 1502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */ 1512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project while (tag_type && p < pppoe_payload + pppoe_length) { 1522949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(*p, 4); 1532949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tag_type = EXTRACT_16BITS(p); 1542949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tag_len = EXTRACT_16BITS(p + 2); 1552949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p += 4; 1562949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* p points to tag_value */ 1572949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1582949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (tag_len) { 1592949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned isascii = 0, isgarbage = 0; 1602949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project const u_char *v = p; 1612949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project char tag_str[MAXTAGPRINT]; 1622949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project unsigned tag_str_len = 0; 1632949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1642949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* TODO print UTF-8 decoded text */ 1652949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project TCHECK2(*p, tag_len); 1662949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (v = p; v < p + tag_len && tag_str_len < MAXTAGPRINT-1; v++) 1672949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (*v >= 32 && *v < 127) { 1682949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tag_str[tag_str_len++] = *v; 1692949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project isascii++; 1702949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 1712949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tag_str[tag_str_len++] = '.'; 1722949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project isgarbage++; 1732949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1742949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tag_str[tag_str_len] = 0; 1752949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1762949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project if (isascii > isgarbage) { 1772949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [%s \"%*.*s\"]", 1782949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tok2str(pppoetag2str, "TAG-0x%x", tag_type), 1792949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (int)tag_str_len, 1802949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project (int)tag_str_len, 1812949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project tag_str); 1822949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 1832949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* Print hex, not fast to abuse printf but this doesn't get used much */ 1842949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [%s 0x", tok2str(pppoetag2str, "TAG-0x%x", tag_type)); 1852949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project for (v=p; v<p+tag_len; v++) { 1862949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("%02X", *v); 1872949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1882949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("]"); 1892949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1902949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1912949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1922949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else 1932949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" [%s]", tok2str(pppoetag2str, 1942949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project "TAG-0x%x", tag_type)); 1952949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 1962949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project p += tag_len; 1972949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* p points to next tag */ 1982949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 1992949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (0); 2002949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } else { 2012949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project /* PPPoE data */ 2022949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf(" "); 2032949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (PPPOE_HDRLEN + ppp_print(pppoe_payload, pppoe_length)); 2042949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project } 2052949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project 2062949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projecttrunc: 2072949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project printf("[|pppoe]"); 2082949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project return (PPPOE_HDRLEN); 2092949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project} 210