home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / root / usr / share / YaST2 / modules / Netmask.ycp < prev    next >
Text File  |  2006-11-29  |  3KB  |  107 lines

  1. /**
  2.  * File:    modules/Netmask.ycp
  3.  * Module:    yast2
  4.  * Summary:    Netmask manipulation routines
  5.  * Authors:    Michal Svec <msvec@suse.cz>
  6.  * Flags:    Stable
  7.  *
  8.  * $Id: Netmask.ycp 31242 2006-06-01 12:59:16Z locilka $
  9.  */
  10.  
  11. {
  12.  
  13. module "Netmask";
  14. textdomain "base";
  15.  
  16. global string ValidChars = "0123456789.";
  17. global string ValidChars4 = "0123456789.";
  18. global string ValidChars6 = "0123456789";
  19.  
  20. /**
  21.  * Check the IPv4 netmask
  22.  * Note that 0.0.0.0 is not a correct netmask.
  23.  * @param netmask network mask
  24.  * @return true if correct
  25.  */
  26. global define boolean Check4(string netmask) ``{
  27.  
  28.     if(netmask == nil || netmask == "") return false;
  29.  
  30.     /* <0,32> */
  31.     if(regexpmatch(netmask, "^[0-9]+$")) {
  32.     integer nm = tointeger(netmask);
  33.     return nm >= 0 && nm <= 32;
  34.     }
  35.  
  36.     /* 255.255.240.0 */
  37.     string s1 = "(128|192|224|240|248|252|254|255)";
  38.     string nm = "^(" + s1 + ".0.0.0|" + "255." + s1 + ".0.0|"
  39.     + "255.255." + s1 + ".0|" + "255.255.255." + s1 + ")$";
  40.     return regexpmatch(netmask, nm);
  41. }
  42.  
  43. /**
  44.  * Check the IPv6 netmask
  45.  * @param netmask network mask
  46.  * @return true if correct
  47.  */
  48. global define boolean Check6(string netmask) ``{
  49.  
  50.     if(netmask == nil || netmask == "") return false;
  51.  
  52.     /* <0,256> */
  53.     if(!regexpmatch(netmask, "^[0-9]+$")) return false;
  54.     integer nm = tointeger(netmask);
  55.     return nm >= 0 && nm <= 256;
  56. }
  57.  
  58. /**
  59.  * Check the netmask
  60.  * @param netmask network mask
  61.  * @return true if correct
  62.  */
  63. global define boolean Check(string netmask) ``{
  64.     return Check4(netmask) || Check6(netmask);
  65. }
  66.  
  67. /**
  68.  * Convert netmask in bits form (20) to netmask string (255.255.240.0)
  69.  * @param bits number of bits in netmask
  70.  * @return netmask string
  71.  */
  72. global define string FromBits(integer bits) ``{
  73.     integer b = bits / 8;
  74.     integer d = bits % 8;
  75.  
  76.     map l = $[ 1:"255.", 2:"255.255.", 3:"255.255.255.", 4:"255.255.255.255" ];
  77.     map r = $[ 3:"0", 2:"0.0", 1:"0.0.0", 0:"0.0.0.0" ];
  78.     map m = $[
  79.     1:"128", 2:"192", 3:"224", 4:"240",
  80.     5:"248", 6:"252", 7:"254", 8:"255",
  81.     ];
  82.  
  83.     return l[b]:"" + (d!=0? m[d]:""+(b!=3?".":"") : "") + r[d==0?b:(b+1)]:"";
  84. }
  85.  
  86. /**
  87.  * Convert IPv4 netmask as string (255.255.240.0) to bits form (20)
  88.  * @param netmask netmask as string
  89.  * @return number of bits in netmask; 32 for empty string
  90.  */
  91. global define integer ToBits(string netmask) ``{
  92.     if (netmask == "")
  93.     {
  94.     return 32;
  95.     }
  96.     integer bits = 0;
  97.     map m = $[
  98.     "128":1, "192":2, "224":3, "240":4,
  99.     "248":5, "252":6, "254":7, "255":8,
  100.     ];
  101.     maplist(string i, splitstring(netmask, "."), ``{ bits = bits + m[i]:0; });
  102.     return bits;
  103. }
  104.  
  105. /* EOF */
  106. }
  107.