[PATCH] Add vty command for setting Access control classes

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Peter Stuge peter at stuge.se
Thu Jul 25 16:02:00 UTC 2013


Ivan Kluchnikov wrote:
> > Ivan Kluchnikov wrote:
> > > This is new version of patch for review and merge:
> > >
> > > - more user-friendly interface for command:
> > >     rach access-control-class 2 barred
> > >     rach access-control-class 11 allowed
> >
> > Yes, much better than before, but perhaps spend the half hour it
> > takes to write that %d-%d parser using sscanf?
> 
> You are welcome :)
> If you implement %d-%d parser, I will change style of this VTY command.

Here you go.


//Peter
-------------- next part --------------
#include <stdio.h>

#ifndef MIN
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif /* MIN */
#ifndef MAX
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#endif /* MAX */

#ifndef ARRAY_SIZE
#define ARRAY_SIZE(a) (sizeof (a) / sizeof (a)[0])
#endif /* ARRAY_SIZE */

int main(int argc,const char *argv[]) {
  int i,val[16];
  int a,b,n1,n2;
  const char *p;

  if(argc<2) {
    fprintf(stderr,"usage: %s int[-int][,...]\n",*argv);
    return 1;
  }

  for(i=0;i<ARRAY_SIZE(val);i++)
    val[i]=0;

  p = argv[1];
  do {
    switch (sscanf(p, "%d%n-%d%n", &a, &n1, &b, &n2)) {
    case 0:
      fprintf(stderr, "invalid input\n");
      return 2;
    case -1:
      perror("sscanf");
      return 3;
    case 1:
      if (a < ARRAY_SIZE(val))
        val[a] = 1;
      p += n1;
      break;
    case 2:
      b = MIN(MAX(a, b), ARRAY_SIZE(val));
      for (i = MIN(a, b); i <= b; i++)
        val[i] = 1;
      p += n2;
      break;
    }
    if (',' == *p)
      p++;
  } while (*p);

  for (i = 0; i < ARRAY_SIZE(val); i++)
    printf("val[%d]=%d\n", i, val[i]);

  return 0;
}


More information about the OpenBSC mailing list