Abstract:
A method of quality of service (QoS) activation of customer premises equipment (CPE) associated with a network, includes activating classifiers associated with a switch port in the CPE, and determining when an associated IP address of the switch port is also activated, wherein the switch port classifier is activated only when the IP address of the switch port is also activated.

Description:
RELATED APPLICATIONS 
       [0001]    This invention claims the benefit of U.S. Provisional Patent Application Ser. No. 61/735,630, filed Dec. 11, 2012, entitled METHOD AND APPARATUS FOR IMPROVED QoS ACTIVATION, the teachings of which are specifically set forth herein by reference, and is related to U.S. Utility patent application Ser. No. 13/693,288, filed on Dec. 4, 2012, entitled MECHANISM TO BLOCK WEB SITES USING RETURN TRAFFIC, the teachings of which are also specifically set forth herein by reference. 
     
    
     FIELD OF THE INVENTION 
       [0002]    The present invention relates to customer premise equipment (CPE) which allows users to browse the worldwide web. More specifically, the present invention relates to CPE which allows for improved the Quality of Service (QoS) activation thereby improving the user&#39;s experience and the performance of the CPE. 
       BACKGROUND OF THE INVENTION 
       [0003]    In multicast and broadcast applications, data are transmitted from a server to multiple receivers over wired and/or wireless networks. A multicast system as used herein is a system in which a server transmits the same data to multiple receivers simultaneously, where the receivers form a subset of all the receivers up to and including all of the receivers. A broadcast system is a system in which a server transmits the same data to all of the receivers simultaneously. That is, a multicast system by definition can include a broadcast system. 
         [0004]    Typically a router connects like and unlike networks such as WANs, MANs, LANs etc. That is, typically, a router is an interface between networks. Typically, a gateway provides an entry or exit into/out of a communications network. The terms router and gateway are used interchangeably herein. A home gateway is simply a gateway device that is used in a home/residential environment. A home gateway as used herein includes the functionality of both a router and a gateway and is used to connect the home network to networks outside the home such as the Internet or cable service provider or satellite provider or other networks provided by a communications provider. 
         [0005]    Most CPE contain multiple switch ports, one of which would connect the desired IP host. However, the desired IP host may not remain connected to one particular port. One method ensuring proper classification is activating classifiers for each switch port. However, this approach is expensive and wasteful as only one particular classifier is used at a time. Redundant classifiers also persistently consume memory and CPU resources, which is undesirable. The art has not heretofore solved the problem of efficient QoS activation since prior networks lack the ability to dynamically activate QoS based on device presence, especially when some packets traversing the network contain time sensitive data. 
       SUMMARY OF THE INVENTION 
       [0006]    The present invention provides methods and apparatus for QoS activation by activating classifiers when their associated IP addresses are also activated. A method of quality of service (QoS) and a CPE activate classifiers associated with a switch port in the CPE, and determine when an associated IP address of the switch port is also activated, wherein the switch port classifier is activated only when the IP address of the switch port is also activated. 
         [0007]    The invention will be best understood by reading the following detailed description of the preferred embodiments thereof in conjunction with the drawings which are first described briefly below. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0008]    The drawings include the following figures briefly described below: 
           [0009]      FIG. 1  illustrates a system for communicating between a home and the internet, shown both WAN (internet) and LAN connection through a gateway device in accordance with the principles of the present invention. 
           [0010]      FIG. 2  is a block diagram of an exemplary gateway device in accordance with the principles of the present invention. 
           [0011]      FIG. 3  is a flow chart of an inventive method for updating device tables. 
           [0012]      FIG. 4  is a flow chart of an inventive method for activating classifiers. 
       
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
       [0013]      FIG. 1  illustrates a system for communicating between a home and the internet, shown both WAN (internet) and LAN connection through a gateway device in accordance with the principles of the present invention. In  FIG. 1  a website, shown at  10 , can be contacted by a gateway  20 , sometimes called the CPE or just “the device” throughout this text, which communicates through the internet so that a user of the CPE  20  can contact the various websites  10  for downloads, browsing and the like. As will be appreciated by those with skill in the art, the CPE  20  may communicate with the internet through a WAN (or LAN as the terms are used interchangeably herein) shown at  30  so that the home network, in which the CPE  20  is normally placed, may efficiently function to provide access to the users of the home network. 
         [0014]    As will be further appreciated, the CPE  20  receives unique IP addresses for the website  10  from the various computers  40  (or other devices in the home network), which themselves are assigned internal IP addresses so that the CPE can manage the home network and the communications throughout. Any number of computers  40  or other devices may reside within the home network and each are thereby assigned IP addresses. As will be appreciated by those skilled in the art, IP networks lacking QoS processes process all of the packets at the same best effort priority level, regardless of traffic differentiation even when some of the packets contain time-sensitive data like, for example, voice or video. This can create delivery problems and can degrade overall system performance, particularly in multiple port CPE networks wherein at least one of the ports connects to a desired IP host but may not remain connected thereto through the same port. Such issues create problems with the user&#39;s experience with the CPE and network, and create data delivery and other errors. 
         [0015]      FIG. 2  is a block diagram of an exemplary gateway device  20  in accordance to the principles of the present invention. The main controller is the block labeled BCM63168V. That is, the present invention may be implemented as a program executable on processor/controller BCM6318V. An alternative implementation may be implementation on an application specific integrated circuit (ASIC) or on a field programmable gate array (FPGA) or an equivalent device. The BCM63168V integrated circuit (IC) will receive and process all data traffic from the LAN side and the WAN side and would include any “blocks” associated with incoming LAN traffic (going out to internet) and then also includes the new “blocks” associated with incoming WAN traffic (interception before being transmitted to LAN device). 
         [0016]    In  FIG. 2  the home gateway  20  includes a front-end for wireless communications and a transceiver (BCM6306) for wired line communications. All reception and transmission signals pass through either the front-end or the transceiver. That is, the means for receiving a requests for access to websites from a user is via either the front-end or the transceiver. The means for determining if the request includes a first domain name is within the controller (BCM63168V) and may be in software (a program) executed on said controller. The means for transmitting the request if the request does not include the first domain name is either the front-end or the transceiver. The means for receiving return traffic in response to the transmitted request is either the front-end or the transceiver. The means for determining if a second domain name in the return traffic matches the first domain name is within the controller (BCM63168V) and may be in software (a program) executed on said controller. The means for allowing access to the website if the first domain name and the second domain name match is within the controller (BCM63168V) and may be in software (a program) executed on said controller. The means for discarding the return traffic if the access is blocked is within the controller (BCM63168V) and may be in software (a program) executed on said controller. The means for determining, based on the first domain name, if the website is blocked is within the controller (BCM63168V) and may be in software (a program) executed on said controller. The means for transmitting the request, if the website in the request is determined not to be blocked, is either the front-end or the transceiver. The means for receiving return traffic in response to the transmitted request is either the front-end or the transceiver. The means for forwarding the return traffic to the user is either the front-end or the transceiver. The means for transmitting a message to the user that access to the requested website is blocked is either the front-end or the transceiver. 
         [0017]    As mentioned above, IP networks lacking QoS schemes process all packets at the same best effort priority level. However, traffic differentiation is desirable when some packets contain time-sensitive data like voice or video. QoS classifiers can detect and associate IP packets to a specified priority level. Some QoS classifiers detect and associate such packets based on IP addresses. To solve the aforementioned problems, the invention activates such classifiers when their associated IP addresses are also activated. In order to accomplish this result and to improve the QoS of a CPE in a network, it is preferable to update the device tables of the CPE, and to activate the classifiers associated with the updated device tables. 
         [0018]      FIG. 3  is a flow chart of an inventive method for updating the device tables of the CPE  20 . The method starts at  50 , and at  60  an IP table address is selected with input  55  from an IP address table. At  70 , the CPE switch port is checked for table IP address connection. At  80 , it is determined whether the CPE switch port is connected to the IP address and if so, then at  110  the IP address is marked active with the switch port in device table  120 . If not, then at  90  it is determined if all the CPE switch ports have been checked. If not, then at  100  another CPE switch port for the table IP address is checked and the loop is repeated at  80 . If so, then at  130  the new CPE IP address so checked is marked inactive and this data is stored in the device table  120 . 
         [0019]    After  110  and simultaneously with  130  it is determined at  140  whether all IP addresses have been selected. If not, then at  160  another IP address is selected with input from IP address table  55 . The loop beginning at  70  is then repeated. If so, at  150 , the next aspect of the inventive method goes to  170  (A) wherein the classifiers can be activated as described below. 
         [0020]    The following code may be employed to update the device tables as described with respect to  FIG. 3 : 
         [0000]    
       
         
               
             
           
               
                   
               
             
             
               
                 CmsRet UpdateDeviceTable(void *msgHandle, CmsMsgHeader *msg) 
               
               
                 { 
               
               
                  CmsRet ret = CMSRET_SUCCESS; 
               
               
                  dtDeviceInfo *deviceInfo; 
               
               
                  int numOfDevices = MAX_DEVICES; 
               
               
                  int inSize = 32; 
               
               
                  int index; 
               
               
                  char buf[sizeof(CmsMsgHeader) + sizeof(DhcpdHostInfoMsgBody)] = 
               
               
                  {0}; 
               
               
                  CmsMsgHeader *hdr = (CmsMsgHeader *) buf; 
               
               
                  DhcpdHostInfoMsgBody *body = (DhcpdHostInfoMsgBody *) (hdr+1); 
               
               
                  deviceInfo = getDeviceTable(&amp;numOfDevices, FALSE); 
               
               
                  pingDevices(deviceInfo, numOfDevices); 
               
               
                  if ((ret = cmsLck_acquireLock( )) == CMSRET_SUCCESS) 
               
               
                  { 
               
               
                   // get hosts entries from the MDM 
               
               
                   appendDHCPDevices(deviceInfo, inSize, &amp;numOfDevices); 
               
               
                   cmsLck_releaseLock( ); 
               
               
                  } 
               
               
                  // look for devices that have mac entries in the bridge 
               
               
                  appendStaticDevices(deviceInfo, inSize, &amp;numOfDevices); 
               
               
                  hdr-&gt;type = CMS_MSG_DHCPD_HOST_RES_INFO; 
               
               
                  hdr-&gt;src = EID_TCH_APPS; 
               
               
                  hdr-&gt;dst = EID_SSK; 
               
               
                  hdr-&gt;flags_event = 1; 
               
               
                  hdr-&gt;dataLength = sizeof(DhcpdHostInfoMsgBody); 
               
               
                  body-&gt;deleteHost = FALSE; 
               
               
                  body-&gt;leaseTimeRemaining = (SINT32) 0; 
               
               
                  snprintf(body-&gt;ifName, sizeof(body-&gt;ifName), “br0”); 
               
               
                  snprintf(body-&gt;hostName, sizeof(body-&gt;hostName), “Unknown”); 
               
               
                  snprintf(body-&gt;addressSource, sizeof(body-&gt;addressSource), MDMVS 
               
               
                  STATIC); 
               
               
                  snprintf(body-&gt;interfaceType, sizeof(body-&gt;interfaceType), 
               
               
                 MDMVS ETHERNET); 
               
               
                  for(index = 0; index &lt; numOfDevices; index++) 
               
               
                  { 
               
               
                   if (deviceInfo[index].active &amp;&amp; deviceInfo[index].dirty) 
               
               
                   { 
               
               
                   snprintf(body-&gt;ipAddr, sizeof(body-&gt;ipAddr), 
               
               
                   deviceInfo[index].ipAddr); 
               
               
                   snprintf(body-&gt;macAddr, sizeof(body-&gt;macAddr), 
               
               
                   deviceInfo[index].macAddr); 
               
               
                    if (cmsMsg_send(msgHandle, hdr) != CMSRET_SUCCESS) 
               
               
                    { 
               
               
                    cmsLog_error(“could not send host info update”); 
               
               
                    } 
               
               
                    else 
               
               
                    { 
               
               
                    cmsLog_debug(“host info update sent!”); 
               
               
                    } 
               
               
                   } 
               
               
                   } 
               
               
                  mapConnTypes(deviceInfo, numOfDevices); 
               
               
                  updateDeviceList(deviceInfo, numOfDevices); 
               
               
                  freeDeviceTable(deviceInfo); 
               
               
                  ret = app_timer(msgHandle, DEV_TBL_TMR, 
               
               
                  DEV_TBL_TMR_TIMEOUT); 
               
               
                  //printf(“%s( ):%d\n”, _FUNCTION_, _LINE_); 
               
               
                  cmsLog_debug(“%s”, rutTCHGlobals_cmsstrerror(ret)); 
               
               
                  return(ret); 
               
               
                 } 
               
               
                   
               
             
          
         
       
     
         [0021]      FIG. 4  is a flow chart of an inventive method for activating classifiers as described above preferably after the device tables have been updated. As the device tables have been updated  170  (A) as noted, with a QoS classifier table  175 , at  180  the a QoS classifier is selected. At  190  the table device is selected with input about the device from device table  120 . It is then determined at  200  whether the QoS classifier and the device table activated IP addresses match. If so, then at  230  the QoS classifier on the matching switch port  230  is activated. If not, then at  210  it is determined whether all of the devices have been selected. If not, then at  220  another device in the device table  120  is selected and the loop repeats at  200 . If so, then at  240  it is determined whether all QoS classifiers have been selected. If so, then the QoS classification activation has been completed at  260 . If not, then at  250 , and with input from the QoS classifier table  175 , the loop repeats at  190  with additional device selection from device table  120 . 
         [0022]    The following code may be employed to activate classifiers as described with respect to  FIG. 4 : 
         [0000]    
       
         
               
             
           
               
                   
               
             
             
               
                 CmsRet ActivateDownstreamADVS_QOS_009(void *msgHandle, 
               
               
                 CmsMsgHeader *msg) 
               
               
                 { 
               
               
                  CmsRet ret = CMSRET_SUCCESS; 
               
               
                  char l3Ifname[CMS_IFNAME_LENGTH] = {0}; 
               
               
                  QosRuleListObject *qrlObj = NULL; 
               
               
                  InstanceIdStack iidStack; 
               
               
                  int i, numOfDevices = MAX_DEVICES; 
               
               
                  dtDeviceInfo *deviceInfo; 
               
               
                  if ((deviceInfo = getDeviceTable(&amp;numOfDevices, FALSE))) 
               
               
                  { 
               
               
                  if (numOfDevices) 
               
               
                  { 
               
               
                   if ((ret = cmsLck_acquireLock( )) == CMSRET_SUCCESS) 
               
               
                   { 
               
               
                   /* Get layer3 interface name */ 
               
               
                   if ((ret = dalRt_getActiveDefaultGateway(l3Ifname)) == 
               
               
                   CMSRET_SUCCESS) 
               
               
                   { 
               
               
                    if (cmsUtl_strcmp(l3Ifname, “&amp;nbsp”)) 
               
               
                    { 
               
               
                    INIT_INSTANCE_ID_STACK(&amp;iidStack); 
               
               
                    while ((ret = cmsObj_getNext(MDMOID_QOS_RULE_LIST, 
               
               
                    &amp;iidStack, 
               
               
                      (void **) &amp;qrlObj)) == CMSRET_SUCCESS) 
               
               
                    { 
               
               
                     if (!IS_EMPTY_STRING(qrlObj-&gt;destIP) &amp;&amp; qrlObj- 
               
               
                 &gt;upstream == FALSE) 
               
               
                     { 
               
               
                      for (i = 0; i &lt; numOfDevices; i++) 
               
               
                      { 
               
               
                       if (cmsUtl_strcmp(qrlObj-&gt;destIP, deviceInfo[i].ipAddr) 
               
               
                        &amp;&amp; deviceInfo[i].active == TRUE) 
               
               
                       { 
               
               
                       ret = 
               
               
                 ActivateDownstreamADVS_QOS_006thruADVS_QOS_012(qrlObj, 
               
               
                        deviceInfo[i].connectionType); 
               
               
                       } 
               
               
                      } 
               
               
                      } 
               
               
                      cmsObj_free((void **) &amp;qrlObj); 
               
               
                      if (ret != CMSRET_SUCCESS) 
               
               
                      { 
               
               
                      break; 
               
               
                      } 
               
               
                     } 
               
               
                     if (ret == CMSRET_NO_MORE_INSTANCES) 
               
               
                     { 
               
               
                      ret = CMSRET_SUCCESS; 
               
               
                     } 
               
               
                     } 
               
               
                    } 
               
               
                    cmsLck_releaseLock( ); 
               
               
                   } 
               
               
                   } 
               
               
                   freeDeviceTable(deviceInfo); 
               
               
                  } 
               
               
                  cmsLog_debug(“%s”, rutTCHGlobals_cmsstrerror(ret)); 
               
               
                  return(ret); 
               
               
                 } 
               
               
                   
               
             
          
         
       
     
         [0023]    The present invention thereby provides methods and apparatus for QoS activation by activating classifiers when their associated IP addresses are also activated. The solves, among other issues, the problems of efficient QoS activation and since prior networks lack the ability to dynamically activate QoS based on device presence, especially when some packets traversing the network contain time sensitive data. 
         [0024]    It is to be further understood that, because some of the constituent system components and method steps depicted in the accompanying figures are preferably implemented in software, the actual connections between the system components (or the process steps) may differ depending upon the manner in which the present invention is programmed. Given the teachings herein, one of ordinary skill in the related art will be able to contemplate these and similar implementations or configurations of the present invention.