---
name: "ipsec_rangetosubnet"
section: "3"
platform: "linux"
package: "openswan"
version: "1:2.6.37-3+deb7u1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/ipsec_rangetosubnet"
---

# ipsec\_rangetosubnet(3)

convert address range to subnet

## NAME

ipsec\_rangetosubnet - convert address range to subnet

## SYNOPSIS

```
#include <freeswan.h>
```

**const char \*rangetosubnet(const ip\_address \*** *start***, const ip\_address \*** *stop***, ip\_subnet \*** *dst***);**

## DESCRIPTION

*Rangetosubnet* accepts two IP addresses which define an address range, from *start* to *stop* inclusive, and converts this to a subnet if possible. The addresses must both be IPv4 or both be IPv6, and the address family of the resulting subnet is the same.

*Rangetosubnet* returns NULL for success and a pointer to a string-literal error message for failure; see DIAGNOSTICS.

## SEE ALSO

[**ipsec\_initsubnet**(3)](/ipsec_initsubnet/3.md), [**ipsec\_ttosubnet**(3)](/ipsec_ttosubnet/3.md)

## DIAGNOSTICS

Fatal errors in **rangetosubnet** are: mixed address families; unknown address family; *start* and *stop* do not define a subnet.

## HISTORY

Written for the FreeS/WAN project by Henry Spencer.

## BUGS

The restriction of error reports to literal strings (so that callers don´t need to worry about freeing them or copying them) does limit the precision of error reporting.

The error-reporting convention lends itself to slightly obscure code, because many readers will not think of NULL as signifying success. A good way to make it clearer is to write something like:

```
const char *error;
error = rangetosubnet( /* ... */ );
if (error != NULL) {
        /* something went wrong */
```
