MCPcopy Create free account
hub / github.com/OpenSIPS/opensips / parse_ip_net

Function parse_ip_net

blacklists.c:882–952  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

880}
881
882static int parse_ip_net(char *in, int len, struct net *ipnet)
883{
884 char *p = NULL;
885 str ip_s, mask_s;
886 struct ip_addr ip, *mask = NULL, *ip_tmp;
887 struct net *ipnet_tmp;
888 int af;
889 unsigned int bitlen;
890
891 p = q_memchr(in, '.', len);
892 if (p)
893 af = AF_INET;
894 else if (q_memchr(in, ':', len)) {
895 af = AF_INET6;
896 } else {
897 LM_ERR("Not an IP");
898 return -1;
899 }
900
901 p = q_memchr(in, '/', len);
902 if (p) {
903 ip_s.s = in;
904 ip_s.len = p - in;
905 } else {
906 ip_s.s = in;
907 ip_s.len = len;
908 }
909
910 ip_tmp = (af == AF_INET) ? str2ip(&ip_s) : str2ip6(&ip_s);
911 if (!ip_tmp) {
912 LM_ERR("Invalid IP address\n");
913 return -1;
914 }
915
916 /* save the IP */
917 ip = *ip_tmp;
918
919 if (p) {
920 mask_s.s = p + 1;
921 mask_s.len = len - ip_s.len - 1;
922 if (!mask_s.s || mask_s.len == 0) {
923 LM_ERR("Empty netmask\n");
924 return -1;
925 }
926 if ((p = (af == AF_INET)?
927 q_memchr(p, '.', len-(p-in)+1):
928 q_memchr(p, ':', len-(p-in)+1)) != NULL) {
929 /* has net */
930 mask = (af == AF_INET) ? str2ip(&mask_s) : str2ip6(&mask_s);
931 if (!mask) {
932 LM_ERR("Invalid netmask\n");
933 return -1;
934 }
935 ipnet_tmp = mk_net(&ip, mask);
936 } else {
937 if (str2int(&mask_s, &bitlen) < 0) {
938 LM_ERR("Invalid netmask bitlen\n");
939 return -1;

Callers 2

mi_bl_get_ruleFunction · 0.85
fixup_blacklist_netFunction · 0.85

Calls 6

q_memchrFunction · 0.85
str2ipFunction · 0.85
str2ip6Function · 0.85
mk_netFunction · 0.85
str2intFunction · 0.85
mk_net_bitlenFunction · 0.85

Tested by

no test coverage detected