/*
 * Copyright (c) 2021 Cisco and/or its affiliates.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef included_ip_sas_h
#define included_ip_sas_h

#include <stdbool.h>
#include <vnet/ip/ip6_packet.h>
#include <vnet/ip/ip4_packet.h>

bool ip6_sas_by_sw_if_index (u32 sw_if_index, const ip6_address_t *dst,
			     ip6_address_t *src);
bool ip4_sas_by_sw_if_index (u32 sw_if_index, const ip4_address_t *dst,
			     ip4_address_t *src);
bool ip6_sas (u32 table_id, u32 sw_if_index, const ip6_address_t *dst,
	      ip6_address_t *src);
bool ip4_sas (u32 table_id, u32 sw_if_index, const ip4_address_t *dst,
	      ip4_address_t *src);

#endif
