Home | History | Annotate | Download | only in inc
      1 /*
      2  * Copyright (c) 2017, The Linux Foundation. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *    * Redistributions of source code must retain the above copyright
      8  *      notice, this list of conditions and the following disclaimer.
      9  *    * Redistributions in binary form must reproduce the above
     10  *      copyright notice, this list of conditions and the following
     11  *      disclaimer in the documentation and/or other materials provided
     12  *      with the distribution.
     13  *    * Neither the name of The Linux Foundation nor the names of its
     14  *      contributors may be used to endorse or promote products derived
     15  *      from this software without specific prior written permission.
     16  *
     17  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
     18  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
     20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
     21  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     24  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     25  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     26  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
     27  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28  */
     29 #ifndef _PREFIX_PARSER_H_
     30 #define _PREFIX_PARSER_H_
     31 
     32 /* External Includes */
     33 #include <string.h>
     34 #include <sys/types.h>
     35 #include <vector>
     36 
     37 /* Internal Includes */
     38 #include "IOffloadManager.h"
     39 
     40 /* Avoiding namespace pollution */
     41 using IP_FAM = ::IOffloadManager::IP_FAM;
     42 using Prefix = ::IOffloadManager::Prefix;
     43 
     44 using ::std::string;
     45 using ::std::vector;
     46 
     47 
     48 class PrefixParser {
     49 public:
     50     PrefixParser();
     51     bool add(vector<string> /* in */);
     52     bool add(string /* in */);
     53     bool addV4(vector<string> /* in */);
     54     bool addV4(string /* in */);
     55     bool addV6(vector<string> /* in */);
     56     bool addV6(string /* in */);
     57     int size();
     58     bool allAreFullyQualified();
     59     Prefix getFirstPrefix();
     60     string getLastErrAsStr();
     61 private:
     62     bool add(string /* in */, IP_FAM /* famHint */);
     63     bool add(vector<string> /* in */, IP_FAM /* famHint */);
     64     static IP_FAM guessIPFamily(string /* in */);
     65     static bool splitIntoAddrAndMask(string /* in */, string& /* addr */,
     66             string& /* mask */);
     67     static int parseSubnetMask(string /* in */, IP_FAM /* famHint */);
     68     static bool parseV4Addr(string /* in */, Prefix& /* out */);
     69     static bool parseV6Addr(string /* in */, Prefix& /* out */);
     70     static bool populateV4Mask(int /* mask */, Prefix& /* out */);
     71     static bool populateV6Mask(int /* mask */, Prefix& /* out */);
     72     static uint32_t createMask(int /* mask */);
     73     static Prefix makeBlankPrefix(IP_FAM /* famHint */);
     74     bool isMaskValid(int /* mask */, IP_FAM /* fam */);
     75     static const uint32_t FULLY_QUALIFIED_MASK = ~0;
     76     vector<Prefix> mPrefixes;
     77     string mLastErr;
     78 }; /* PrefixParser */
     79 #endif /* _PREFIX_PARSER_H_ */