# Generate dl-tunable-list.h from dl-tunables.list

BEGIN {
  min_of["STRING"]="0"
  max_of["STRING"]="0"
  min_of["INT_32"]="INT32_MIN"
  max_of["INT_32"]="INT32_MAX"
  min_of["UINT_64"]="0"
  max_of["UINT_64"]="UINT64_MAX"
  min_of["SIZE_T"]="0"
  max_of["SIZE_T"]="SIZE_MAX"
  tunable=""
  ns=""
  top_ns=""
}

# Skip over blank lines and comments.
/^#/ {
  next
}

/^[ \t]*$/ {
  next
}

# Beginning of either a top namespace, tunable namespace or a tunable, decided
# on the current value of TUNABLE, NS or TOP_NS.
$2 == "{" {
  if (top_ns == "") {
    top_ns = $1
  }
  else if (ns == "") {
    ns = $1
  }
  else if (tunable == "") {
    tunable = $1
  }
  else {
    printf ("Unexpected occurrence of '{': %s:%d\n", FILENAME, FNR)
    exit 1
  }

  next
}

# End of either a top namespace, tunable namespace or a tunable.
$1 == "}" {
  if (tunable != "") {
    # Tunables definition ended, now fill in default attributes.
    if (!types[top_ns,ns,tunable]) {
      types[top_ns,ns,tunable] = "STRING"
    }
    if (!minvals[top_ns,ns,tunable]) {
      minvals[top_ns,ns,tunable] = min_of[types[top_ns,ns,tunable]]
    }
    if (!maxvals[top_ns,ns,tunable]) {
      maxvals[top_ns,ns,tunable] = max_of[types[top_ns,ns,tunable]]
    }
    if (!env_alias[top_ns,ns,tunable]) {
      env_alias[top_ns,ns,tunable] = "NULL"
    }
    if (!security_level[top_ns,ns,tunable]) {
      security_level[top_ns,ns,tunable] = "SXID_ERASE"
    }

    tunable = ""
  }
  else if (ns != "") {
    ns = ""
  }
  else if (top_ns != "") {
    top_ns = ""
  }
  else {
    printf ("syntax error: extra }: %s:%d\n", FILENAME, FNR)
    exit 1
  }
  next
}

# Everything else, which could either be a tunable without any attributes or a
# tunable attribute.
{
  if (ns == "") {
    printf("Line %d: Invalid tunable outside a namespace: %s\n", NR, $0)
    exit 1
  }

  if (tunable == "") {
    # We encountered a tunable without any attributes, so note it with a
    # default.
    types[top_ns,ns,$1] = "STRING"
    next
  }

  # Otherwise, we have encountered a tunable attribute.
  split($0, arr, ":")
  attr = gensub(/^[ \t]+|[ \t]+$/, "", "g", arr[1])
  val = gensub(/^[ \t]+|[ \t]+$/, "", "g", arr[2])

  if (attr == "type") {
    types[top_ns,ns,tunable] = val
  }
  else if (attr == "minval") {
    minvals[top_ns,ns,tunable] = val
  }
  else if (attr == "maxval") {
    maxvals[top_ns,ns,tunable] = val
  }
  else if (attr == "env_alias") {
    env_alias[top_ns,ns,tunable] = sprintf("\"%s\"", val)
  }
  else if (attr == "security_level") {
    if (val == "SXID_ERASE" || val == "SXID_IGNORE" || val == "NONE") {
      security_level[top_ns,ns,tunable] = val
    }
    else {
      printf("Line %d: Invalid value (%s) for security_level: %s, ", NR, val,
	     $0)
      print("Allowed values are 'SXID_ERASE', 'SXID_IGNORE', or 'NONE'")
      exit 1
    }
  }
  else if (attr == "default") {
    if (types[top_ns,ns,tunable] == "STRING") {
      default_val[top_ns,ns,tunable] = sprintf(".strval = \"%s\"", val);
    }
    else {
      default_val[top_ns,ns,tunable] = sprintf(".numval = %s", val)
    }
  }
}

END {
  if (ns != "") {
    print "Unterminated namespace.  Is a closing brace missing?"
    exit 1
  }

  print "/* AUTOGENERATED by gen-tunables.awk.  */"
  print "#ifndef _TUNABLES_H_"
  print "# error \"Do not include this file directly.\""
  print "# error \"Include tunables.h instead.\""
  print "#endif"
  print "#include <dl-procinfo.h>\n"

  # Now, the enum names
  print "\ntypedef enum"
  print "{"
  for (tnm in types) {
    split (tnm, indices, SUBSEP);
    t = indices[1];
    n = indices[2];
    m = indices[3];
    printf ("  TUNABLE_ENUM_NAME(%s, %s, %s),\n", t, n, m);
  }
  print "} tunable_id_t;\n"

  # Finally, the tunable list.
  print "\n#ifdef TUNABLES_INTERNAL"
  print "static tunable_t tunable_list[] attribute_relro = {"
  for (tnm in types) {
    split (tnm, indices, SUBSEP);
    t = indices[1];
    n = indices[2];
    m = indices[3];
    printf ("  {TUNABLE_NAME_S(%s, %s, %s)", t, n, m)
    printf (", {TUNABLE_TYPE_%s, %s, %s}, {%s}, NULL, TUNABLE_SECLEVEL_%s, %s},\n",
	    types[t,n,m], minvals[t,n,m], maxvals[t,n,m],
	    default_val[t,n,m], security_level[t,n,m], env_alias[t,n,m]);
  }
  print "};"
  print "#endif"
}
