
#    Licensed to the Apache Software Foundation (ASF) under one
#    or more contributor license agreements.  See the NOTICE file
#    distributed with this work for additional information
#    regarding copyright ownership.  The ASF licenses this file
#    to you 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.
Bundle-Activator: org.apache.aries.rsa.topologymanager.Activator
Require-Capability: \
	osgi.remoteserviceadmin.discovery;filter:="(&(version>=1.0)(!(version>=2.0)))",\
	osgi.remoteserviceadmin.distribution;filter:="(&(version>=1.0)(!(version>=2.0)))"
Provide-Capability: \
	osgi.remoteserviceadmin.topology; version:Version=1.1.0; policy:List<String>="promiscous"

