mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
libpfctl: relocate implementations of pfr_add/get/set_addrs
Reviewed by: kp MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D34740
This commit is contained in:
parent
ab5c7dff95
commit
4823489ab6
|
@ -1460,3 +1460,99 @@ pfctl_get_syncookies(int dev, struct pfctl_syncookies *s)
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
pfctl_table_add_addrs(int dev, struct pfr_table *tbl, struct pfr_addr
|
||||||
|
*addr, int size, int *nadd, int flags)
|
||||||
|
{
|
||||||
|
struct pfioc_table io;
|
||||||
|
|
||||||
|
if (tbl == NULL || size < 0 || (size && addr == NULL)) {
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
bzero(&io, sizeof io);
|
||||||
|
io.pfrio_flags = flags;
|
||||||
|
io.pfrio_table = *tbl;
|
||||||
|
io.pfrio_buffer = addr;
|
||||||
|
io.pfrio_esize = sizeof(*addr);
|
||||||
|
io.pfrio_size = size;
|
||||||
|
|
||||||
|
if (ioctl(dev, DIOCRADDADDRS, &io))
|
||||||
|
return (errno);
|
||||||
|
if (nadd != NULL)
|
||||||
|
*nadd = io.pfrio_nadd;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
pfctl_table_del_addrs(int dev, struct pfr_table *tbl, struct pfr_addr
|
||||||
|
*addr, int size, int *ndel, int flags)
|
||||||
|
{
|
||||||
|
struct pfioc_table io;
|
||||||
|
|
||||||
|
if (tbl == NULL || size < 0 || (size && addr == NULL)) {
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
bzero(&io, sizeof io);
|
||||||
|
io.pfrio_flags = flags;
|
||||||
|
io.pfrio_table = *tbl;
|
||||||
|
io.pfrio_buffer = addr;
|
||||||
|
io.pfrio_esize = sizeof(*addr);
|
||||||
|
io.pfrio_size = size;
|
||||||
|
|
||||||
|
if (ioctl(dev, DIOCRDELADDRS, &io))
|
||||||
|
return (errno);
|
||||||
|
if (ndel != NULL)
|
||||||
|
*ndel = io.pfrio_ndel;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
pfctl_table_set_addrs(int dev, struct pfr_table *tbl, struct pfr_addr
|
||||||
|
*addr, int size, int *size2, int *nadd, int *ndel, int *nchange, int flags)
|
||||||
|
{
|
||||||
|
struct pfioc_table io;
|
||||||
|
|
||||||
|
if (tbl == NULL || size < 0 || (size && addr == NULL)) {
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
bzero(&io, sizeof io);
|
||||||
|
io.pfrio_flags = flags;
|
||||||
|
io.pfrio_table = *tbl;
|
||||||
|
io.pfrio_buffer = addr;
|
||||||
|
io.pfrio_esize = sizeof(*addr);
|
||||||
|
io.pfrio_size = size;
|
||||||
|
io.pfrio_size2 = (size2 != NULL) ? *size2 : 0;
|
||||||
|
if (ioctl(dev, DIOCRSETADDRS, &io))
|
||||||
|
return (-1);
|
||||||
|
if (nadd != NULL)
|
||||||
|
*nadd = io.pfrio_nadd;
|
||||||
|
if (ndel != NULL)
|
||||||
|
*ndel = io.pfrio_ndel;
|
||||||
|
if (nchange != NULL)
|
||||||
|
*nchange = io.pfrio_nchange;
|
||||||
|
if (size2 != NULL)
|
||||||
|
*size2 = io.pfrio_size2;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pfctl_table_get_addrs(int dev, struct pfr_table *tbl, struct pfr_addr *addr,
|
||||||
|
int *size, int flags)
|
||||||
|
{
|
||||||
|
struct pfioc_table io;
|
||||||
|
|
||||||
|
if (tbl == NULL || size == NULL || *size < 0 ||
|
||||||
|
(*size && addr == NULL)) {
|
||||||
|
return (EINVAL);
|
||||||
|
}
|
||||||
|
bzero(&io, sizeof io);
|
||||||
|
io.pfrio_flags = flags;
|
||||||
|
io.pfrio_table = *tbl;
|
||||||
|
io.pfrio_buffer = addr;
|
||||||
|
io.pfrio_esize = sizeof(*addr);
|
||||||
|
io.pfrio_size = *size;
|
||||||
|
if (ioctl(dev, DIOCRGETADDRS, &io))
|
||||||
|
return (-1);
|
||||||
|
*size = io.pfrio_size;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
|
@ -400,5 +400,13 @@ int pfctl_clear_nat(int dev, const char *anchorname);
|
||||||
int pfctl_clear_eth_rules(int dev, const char *anchorname);
|
int pfctl_clear_eth_rules(int dev, const char *anchorname);
|
||||||
int pfctl_set_syncookies(int dev, const struct pfctl_syncookies *s);
|
int pfctl_set_syncookies(int dev, const struct pfctl_syncookies *s);
|
||||||
int pfctl_get_syncookies(int dev, struct pfctl_syncookies *s);
|
int pfctl_get_syncookies(int dev, struct pfctl_syncookies *s);
|
||||||
|
int pfctl_table_add_addrs(int dev, struct pfr_table *tbl, struct pfr_addr
|
||||||
|
*addr, int size, int *nadd, int flags);
|
||||||
|
int pfctl_table_del_addrs(int dev, struct pfr_table *tbl, struct pfr_addr
|
||||||
|
*addr, int size, int *ndel, int flags);
|
||||||
|
int pfctl_table_set_addrs(int dev, struct pfr_table *tbl, struct pfr_addr
|
||||||
|
*addr, int size, int *size2, int *nadd, int *ndel, int *nchange,
|
||||||
|
int flags);
|
||||||
|
int pfctl_table_get_addrs(int dev, struct pfr_table *tbl, struct pfr_addr
|
||||||
|
*addr, int *size, int flags);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -211,24 +211,13 @@ int
|
||||||
pfr_add_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,
|
pfr_add_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,
|
||||||
int *nadd, int flags)
|
int *nadd, int flags)
|
||||||
{
|
{
|
||||||
struct pfioc_table io;
|
int ret;
|
||||||
|
|
||||||
if (tbl == NULL || size < 0 || (size && addr == NULL)) {
|
ret = pfctl_table_add_addrs(dev, tbl, addr, size, nadd, flags);
|
||||||
errno = EINVAL;
|
if (ret) {
|
||||||
|
errno = ret;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
bzero(&io, sizeof io);
|
|
||||||
io.pfrio_flags = flags;
|
|
||||||
io.pfrio_table = *tbl;
|
|
||||||
io.pfrio_buffer = addr;
|
|
||||||
io.pfrio_esize = sizeof(*addr);
|
|
||||||
io.pfrio_size = size;
|
|
||||||
if (ioctl(dev, DIOCRADDADDRS, &io)) {
|
|
||||||
pfr_report_error(tbl, &io, "add addresses in");
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
if (nadd != NULL)
|
|
||||||
*nadd = io.pfrio_nadd;
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -236,24 +225,13 @@ int
|
||||||
pfr_del_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,
|
pfr_del_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,
|
||||||
int *ndel, int flags)
|
int *ndel, int flags)
|
||||||
{
|
{
|
||||||
struct pfioc_table io;
|
int ret;
|
||||||
|
|
||||||
if (tbl == NULL || size < 0 || (size && addr == NULL)) {
|
ret = pfctl_table_del_addrs(dev, tbl, addr, size, ndel, flags);
|
||||||
errno = EINVAL;
|
if (ret) {
|
||||||
|
errno = ret;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
bzero(&io, sizeof io);
|
|
||||||
io.pfrio_flags = flags;
|
|
||||||
io.pfrio_table = *tbl;
|
|
||||||
io.pfrio_buffer = addr;
|
|
||||||
io.pfrio_esize = sizeof(*addr);
|
|
||||||
io.pfrio_size = size;
|
|
||||||
if (ioctl(dev, DIOCRDELADDRS, &io)) {
|
|
||||||
pfr_report_error(tbl, &io, "delete addresses in");
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
if (ndel != NULL)
|
|
||||||
*ndel = io.pfrio_ndel;
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,31 +239,14 @@ int
|
||||||
pfr_set_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,
|
pfr_set_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int size,
|
||||||
int *size2, int *nadd, int *ndel, int *nchange, int flags)
|
int *size2, int *nadd, int *ndel, int *nchange, int flags)
|
||||||
{
|
{
|
||||||
struct pfioc_table io;
|
int ret;
|
||||||
|
|
||||||
if (tbl == NULL || size < 0 || (size && addr == NULL)) {
|
ret = pfctl_table_set_addrs(dev, tbl, addr, size, size2, nadd, ndel,
|
||||||
errno = EINVAL;
|
nchange, flags);
|
||||||
|
if (ret) {
|
||||||
|
errno = ret;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
bzero(&io, sizeof io);
|
|
||||||
io.pfrio_flags = flags;
|
|
||||||
io.pfrio_table = *tbl;
|
|
||||||
io.pfrio_buffer = addr;
|
|
||||||
io.pfrio_esize = sizeof(*addr);
|
|
||||||
io.pfrio_size = size;
|
|
||||||
io.pfrio_size2 = (size2 != NULL) ? *size2 : 0;
|
|
||||||
if (ioctl(dev, DIOCRSETADDRS, &io)) {
|
|
||||||
pfr_report_error(tbl, &io, "set addresses in");
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
if (nadd != NULL)
|
|
||||||
*nadd = io.pfrio_nadd;
|
|
||||||
if (ndel != NULL)
|
|
||||||
*ndel = io.pfrio_ndel;
|
|
||||||
if (nchange != NULL)
|
|
||||||
*nchange = io.pfrio_nchange;
|
|
||||||
if (size2 != NULL)
|
|
||||||
*size2 = io.pfrio_size2;
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -293,24 +254,13 @@ int
|
||||||
pfr_get_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int *size,
|
pfr_get_addrs(struct pfr_table *tbl, struct pfr_addr *addr, int *size,
|
||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
struct pfioc_table io;
|
int ret;
|
||||||
|
|
||||||
if (tbl == NULL || size == NULL || *size < 0 ||
|
ret = pfctl_table_get_addrs(dev, tbl, addr, size, flags);
|
||||||
(*size && addr == NULL)) {
|
if (ret) {
|
||||||
errno = EINVAL;
|
errno = ret;
|
||||||
return (-1);
|
return (-1);
|
||||||
}
|
}
|
||||||
bzero(&io, sizeof io);
|
|
||||||
io.pfrio_flags = flags;
|
|
||||||
io.pfrio_table = *tbl;
|
|
||||||
io.pfrio_buffer = addr;
|
|
||||||
io.pfrio_esize = sizeof(*addr);
|
|
||||||
io.pfrio_size = *size;
|
|
||||||
if (ioctl(dev, DIOCRGETADDRS, &io)) {
|
|
||||||
pfr_report_error(tbl, &io, "get addresses from");
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
*size = io.pfrio_size;
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue