misc.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /* misc.c - Miscellaneous library functions */
  2. /* Written 1997-2000 by Werner Almesberger, EPFL-ICA/ICA */
  3. #if HAVE_CONFIG_H
  4. #include <config.h>
  5. #endif
  6. #include <stdint.h>
  7. #include <stdarg.h>
  8. #include <string.h>
  9. #include <sys/socket.h>
  10. #include <sys/ioctl.h>
  11. #include <netinet/in.h> /* for htons */
  12. #include <atm.h>
  13. #include <atmsap.h>
  14. int __atmlib_fetch(const char **pos,...)
  15. {
  16. const char *value;
  17. int ref_len,best_len,len;
  18. int i,best;
  19. va_list ap;
  20. va_start(ap,pos);
  21. ref_len = strlen(*pos);
  22. best_len = 0;
  23. best = -1;
  24. for (i = 0; (value = va_arg(ap,const char *)); i++) {
  25. len = strlen(value);
  26. if (*value != '!' && len <= ref_len && len > best_len &&
  27. !strncasecmp(*pos,value,len)) {
  28. best = i;
  29. best_len = len;
  30. }
  31. }
  32. va_end(ap);
  33. if (best > -1) (*pos) += best_len;
  34. return best;
  35. }
  36. void atm_tcpip_port_mapping(char *vs_id,uint8_t protocol,uint16_t port)
  37. {
  38. memcpy(vs_id,ATM_FORUM_OUI "\x01",4);
  39. vs_id[4] = protocol; /* e.g. IP_TCP or IP_UDP; from netinet/protocols.h */
  40. vs_id[5] = (htons(port) >> 8) & 255;
  41. vs_id[6] = htons(port) & 255;
  42. }